|
|
场景:
有时候自己编写的程序不想被别人带走使用,想着自己的成果在自己的电脑上使用。
原理:
生成一个依据CPU序列号和本人自设字符串共同加密的摘要,保存key文件在本地。每次运行自己的程序时检验key文件的摘要和本地机器运算的摘要是否一致,不一致就认为不是你允许的计算机而退出程序。
源码:
- 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
复制代码 使用办法:
AUTHOR='52pj'是个人自设字符串
KEYFILENAME='./RegisterKey.key'是生成key文件的摘要
生成文件的调用方法:
BuildRegisterKey()
验证key的调用发放:
BuildRegisterKey()
总结:感觉100%能实现自己的目标要求,能否防住你周围90%的人员使用你的程序,pj大侠估计很容易就绕开了。聊胜于无,能够满足自己的要求即可,第一次在52pj发源码,请大家给个评价,帮助提升。
|
|