原理
- 判断路径下是否存在识别文件,若存在就解密对比,若不存在就进入机器码注册:
- 获取系统C盘序列号作为识别ID,并添加随机数作为混淆,生成最终机器码。
- 将机器码发给软件开发者,开发者将机器码解密后,添加自己的标识符号并加密生成key,发给用户。
- 用户输入key,程序对比并保存。
- 用户下次打开软件时,重新开始步骤‘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