這篇文章主要介紹了Python Des加密解密如何實現軟件注冊碼機器碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
原理
- 判斷路徑下是否存在識別文件,若存在就解密對比,若不存在就進入機器碼注冊:
- 獲取系統C盤序列號作為識別ID,并添加隨機數作為混淆,生成最終機器碼。
- 將機器碼發給軟件開發者,開發者將機器碼解密后,添加自己的標識符號并加密生成key,發給用戶。
- 用戶輸入key,程序對比并保存。
- 用戶下次打開軟件時,重新開始步驟‘1'。
說明
- 加密:將序列號經過Des加密,再經過base64編碼。
- 解密:將密碼經過base64解碼,再經過Des解密。
- 寫文件:將二進制字符轉為十六進制保存。
- 讀文件:將十六進制轉為二進制。
代碼
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
# coding: utf-8 import win32api import pyDes from binascii import b2a_hex, a2b_hex import base64 import os def getCVolumeSerialNumber(): CVolumeSerialNumber = win32api.GetVolumeInformation( "C:\\" )[ 1 ] # print(CVolumeSerialNumber) if CVolumeSerialNumber: return str (CVolumeSerialNumber) else : return 0 def DesEncrypt( str ): k = pyDes.des(Des_Key, pyDes.CBC, Des_IV, pad = None , padmode = pyDes.PAD_PKCS5) encryptStr = k.encrypt( str ) string = base64.b64encode(encryptStr) # print(string) return string # 轉base64編碼返回 def DesDecrypt(string): string = base64.b64decode(string) k = pyDes.des(Des_Key, pyDes.CBC, Des_IV, pad = None , padmode = pyDes.PAD_PKCS5) decryptStr = k.decrypt(string) # print(decryptStr) return decryptStr Des_Key = "12345678" # Key Des_IV = "12345678" # 自定IV向量 def Register(): if os.path.isfile( 'conf.bin' ): with open ( 'conf.bin' , 'rb' ) as fp: key = a2b_hex(fp.read()) print (key) serialnumber = getCVolumeSerialNumber() decryptstr = DesDecrypt(key).decode( 'utf8' ) print (decryptstr) if serialnumber in decryptstr: if 'Buy' in decryptstr: print ( '>> Buy' ) print ( ">> 驗證完成" ) return 1 elif 'Trial' in decryptstr: print ( '>> Trial' ) return 2 rand = str (random.randrange( 1 , 1000 )) serialnumber = getCVolumeSerialNumber() + rand print (serialnumber) encryptstr = DesEncrypt(serialnumber).decode( 'utf8' ) print ( ">> 序列號:" , encryptstr) while True : key = input ( ">> 驗證碼:" ) try : decryptstr = DesDecrypt(key.encode( 'utf8' )).decode( 'utf8' ) print (decryptstr) if serialnumber in decryptstr: if 'Buy' in decryptstr: print ( '>> Buy' ) with open ( 'conf.bin' , 'wb' ) as fp: fp.write(b2a_hex(key.encode( 'utf8' ))) print ( ">> 驗證完成" ) return 1 elif 'Trial' in decryptstr: print ( '>> Trial' ) return 2 except Exception as e: print (e) print ( ">> 輸入錯誤" ) continue |
效果
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。
原文鏈接:https://www.cnblogs.com/sxf1061700625/p/11452087.html