这段代码是一个简单的Python脚本,用于生成和校验软件的注册密钥。脚本使用了wmi
库来获取计算机的CPU序列号,并使用hashlib
库进行MD5哈希加密。
以下是代码的主要功能和流程:
- 定义常量和文件路径:
AUTHOR
:作者或标识,用于生成密钥。KEYFILENAME
:存储密钥的文件名。
- 获取本地机器的加密字符串:
- 使用
wmi
库获取计算机的CPU序列号,然后将其与AUTHOR
拼接。 - 对拼接后的字符串进行一次MD5哈希加密。
- 将加密结果与
AUTHOR
再次拼接,进行第二次MD5哈希加密。 - 返回最终的加密字符串。
- 从文件中获取密钥:
- 打开存储密钥的文件,读取第一行内容作为密钥。
- 返回读取的密钥字符串。
- 校验是否注册:
- 获取本地机器的加密字符串。
- 从文件中获取密钥。
- 将文件中的密钥与本地机器的加密字符串进行比较。
- 如果比较结果相等,则返回
True
表示已注册,否则返回False
表示未注册。
- 生成注册密钥文件:
- 获取CPU序列号。
- 将CPU序列号与
AUTHOR
拼接,并进行一次MD5哈希加密。 - 将加密结果写入存储密钥的文件。
- 生成注册密钥文件(重载函数):
- 接受一个解密字符串参数。
- 将解密字符串与
AUTHOR
拼接,并进行一次MD5哈希加密。 - 将加密结果写入存储密钥的文件。
- 显示CPU序列号:
- 使用
wmi
库获取计算机的CPU序列号。
这段代码可以用于生成和验证软件的注册密钥,通过对CPU序列号的加密和校验,实现了简单的注册功能。在使用之前,需要替换AUTHOR
为相应的标识,然后根据需要调用相应的函数。
import wmi
import hashlib
import os
AUTHOR='52pj'
KEYFILENAME='./RegisterKey.key'
#获取CPU的序列号加上Author字段,MD5一次,再在结果加上Author字段再MD5一次,形成最终的比较密码
def GetLocalMachineEncrypedString():
try:
c = wmi.WMI()
decryptString = c.win32_Processor()[0].ProcessorId.strip() + AUTHOR
encrypedString = hashlib.md5(decryptString.encode('utf-8')).hexdigest()
decryptString = encrypedString + AUTHOR
encrypedString = hashlib.md5(decryptString.encode('utf-8')).hexdigest()
except:
encrypedString = hashlib.md5(AUTHOR.encode('utf-8')).hexdigest()
return encrypedString
#文件中储存的Key是CPU序列号加Author,一次MD5结果
def GetKeyFromFile():
try:
f=open(KEYFILENAME,'r')
lines=f.readlines()
keyString=lines[0]
return keyString
except:
return ''
#把文件的key加上author,做最后一次MD5生成最终结果
def CheckIsRegistered():
decryptString=GetKeyFromFile()+AUTHOR
encrypedString = hashlib.md5(decryptString.encode('utf-8')).hexdigest()
if encrypedString==GetLocalMachineEncrypedString():
return True
else:
return False
#生成key文件
def BuildRegisterKey():
try:
c = wmi.WMI()
decryptString = c.win32_Processor()[0].ProcessorId.strip() + AUTHOR
encrypedString = hashlib.md5(decryptString.encode('utf-8')).hexdigest()
except:
encrypedString=''
try:
f=os.open(KEYFILENAME,os.O_CREAT|os.O_WRONLY)
os.write(f,encrypedString.encode('utf-8'))
print('写入', KEYFILENAME, '成功')
except:
print('写入',KEYFILENAME,'失败')
def BuildRegisterKey(decryptString):
if decryptString:
decryptString = decryptString + AUTHOR
encrypedString = hashlib.md5(decryptString.encode('utf-8')).hexdigest()
else:
encrypedString=''
try:
f=os.open(KEYFILENAME,os.O_CREAT|os.O_WRONLY)
os.write(f,encrypedString.encode('utf-8'))
print('写入', KEYFILENAME, '成功')
except:
print('写入',KEYFILENAME,'失败')
def ShowCPUSerialNumber():
try:
c = wmi.WMI()
decryptString = c.win32_Processor()[0].ProcessorId.strip()
except:
decryptString=''
return decryptString
评论前必须登录!
注册