场景:有时候自己编写的程序不想被别人带走使用,想着自己的成果在自己的电脑上使用。
原理:生成一个依据CPU序列号和本人自设字符串共同加密的摘要,保存key文件在本地。每次运行自己的程序时检验key文件的摘要和本地机器运算的摘要是否一致,不一致就认为不是你允许的计算机而退出程序。
使用办法:
AUTHOR='52pj'是个人自设字符串
KEYFILENAME='./RegisterKey.key'是生成key文件的摘要
生成文件的调用方法:BuildRegisterKey()
验证key的调用发放:BuildRegisterKey()
Python 代码:【复制】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