Python Des加密與解密實現軟件注冊碼、機器碼


 

原理

  1. 判斷路徑下是否存在識別文件,若存在就解密對比,若不存在就進入機器碼注冊:
  2. 獲取系統C盤序列號作為識別ID,並添加隨機數作為混淆,生成最終機器碼。
  3. 將機器碼發給軟件開發者,開發者將機器碼解密后,添加自己的標識符號並加密生成key,發給用戶。
  4. 用戶輸入key,程序對比並保存。
  5. 用戶下次打開軟件時,重新開始步驟‘1’。

說明

  • 加密:將序列號經過Des加密,再經過base64編碼。
  • 解密:將密碼經過base64解碼,再經過Des解密。
  • 寫文件:將二進制字符轉為十六進制保存。
  • 讀文件:將十六進制轉為二進制。

代碼

 1 #  coding: utf-8
 2  
 3 import win32api
 4 import pyDes
 5 from binascii import b2a_hex, a2b_hex
 6 import base64
 7 import os
 8 def getCVolumeSerialNumber():
 9     CVolumeSerialNumber=win32api.GetVolumeInformation("C:\\")[1]
10     # print(CVolumeSerialNumber)
11     if CVolumeSerialNumber:
12         return str(CVolumeSerialNumber)
13     else:
14         return 0
15  
16 def DesEncrypt(str):
17     k = pyDes.des(Des_Key, pyDes.CBC, Des_IV, pad=None, padmode=pyDes.PAD_PKCS5)
18     encryptStr = k.encrypt(str)
19     string = base64.b64encode(encryptStr)
20     # print(string)
21     return string  # 轉base64編碼返回
22  
23 def DesDecrypt(string):
24     string = base64.b64decode(string)
25     k = pyDes.des(Des_Key, pyDes.CBC, Des_IV, pad=None, padmode=pyDes.PAD_PKCS5)
26     decryptStr = k.decrypt(string)
27     # print(decryptStr)
28     return decryptStr
29  
30 Des_Key = "12345678"  # Key
31 Des_IV = "12345678"  # 自定IV向量
32 def Register():
33     if os.path.isfile('conf.bin'):
34         with open('conf.bin', 'rb') as fp:
35             key = a2b_hex(fp.read())
36             print(key)
37         serialnumber = getCVolumeSerialNumber()
38         decryptstr = DesDecrypt(key).decode('utf8')
39         print(decryptstr)
40         if serialnumber in decryptstr:
41             if 'Buy' in decryptstr:
42                 print('>> Buy')
43                 print(">> 驗證完成")
44                 return 1
45             elif 'Trial' in decryptstr:
46                 print('>> Trial')
47                 return 2
48     rand = str(random.randrange(1, 1000))
49     serialnumber = getCVolumeSerialNumber() + rand
50     print(serialnumber)
51     encryptstr = DesEncrypt(serialnumber).decode('utf8')
52     print(">> 序列號:", encryptstr)
53     while True:
54         key = input(">> 驗證碼:")
55         try:
56             decryptstr = DesDecrypt(key.encode('utf8')).decode('utf8')
57             print(decryptstr)
58             if serialnumber in decryptstr:
59                 if 'Buy' in decryptstr:
60                     print('>> Buy')
61                     with open('conf.bin', 'wb') as fp:
62                         fp.write(b2a_hex(key.encode('utf8')))
63                         print(">> 驗證完成")
64                     return 1
65                 elif 'Trial' in decryptstr:
66                     print('>> Trial')
67                     return 2
68         except Exception as e:
69             print(e)
70             print(">> 輸入錯誤")
71             continue

效果

 

 

 

 

 

歡迎關注↓↓↓

  • 頭條號:小鋒學長

  • 微信公眾號:xfxuezhang

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM