软件授权文件linse

在完成软件开发以后,往往需要将软件打包并发送给用户使用。但是若只希望给特定的用户进行使用,那么就需要将软件设置License(许可证)。本篇文章就来提供一种生成license文件的思路。
软件license文件生成器
1、前言
软件开发商完成一个软件的模块,希望交付给用户进行使用。软件开发商一般是希望只授权给某些用户使用,而不希望软件被其他未授权用户进行使用。因此需要开发一个软件授权的机制。
用户安装或者第一次使用软件的时候,软件是没有被授权的。当用户希望将软件绑定到某一台特定的计算机进行使用时,提交目标计算机的MAC地址给软件开发商,收到开发商的授权以后就能正常使用软件了。
软件开发商收到授权请求时,获得软件安装的目标计算机的MAC地址。通过一套绑定mac地址的算法,生成了一个license,并且具有license失效的时间。生成的license同软件中内置的同一套算法生成的信息进行比对,如果比对上,那么授权成功。如果比对不上或者授权过期,那么授权失败。
2、使用pyqts5开发
2.1框架
1、获取目标计算机的mac地址
2、设置license过期的时间
3、对mac和授权时间进行加密
4、生成激活码并保存到.lic文件中
5、软件读取.lic文件,并和内置算法生成的激活码比较
2.2算法
算法的核心就是,对mac地址进行hash计算。为了增加生成的license文件的困难度,在mac地址之前再加上一个特定的字符,让该license生成软件的破解难度可以稍微提高。例如在这里的示例代码中,特定字符暂定为first_key。
Hash算法的特点是,HASH的设计以无法解为目的;简单说来就是正向简单,逆向困难。
1、得到密钥,通过hash算法计算目标计算机的mac地址
pow=hash_msg('first_key'+str(self.mac_adds))
新建一个license_str的字典,用于保存真实的mac地址,license失效时间,加密后的字符串
license_str={}
license_str['mac']=self.mac_adds
license_str['time_str']=self.active_date
license_str['psw']=pow
生成的incense_str作为一个字典,写入license文件中,是可以很直接地看出其组成。
因此为了更进一步加密,保证写入license文件中的信息是无序且无意义的字符串,采用aescodert进行加密
from aescodert import prpcrypts
pc=prpcrypts('keyskeyskeyskeysh')#初始化密钥
s_pt(str(license_str()))#<class'bytes'>
AES只有一个密钥,这个密钥既用来加密,也用于解密。例如在上面的示例代码中,采用了keyskeyskeyskeysh作为密钥。该密钥在license生成软件中作为加密密钥,同时在使用license地软件中作为解密密钥。
from aescodert import prpcrypts
pc=prpcrypts('keyskeyskeyskeysh')#初始化密钥
d=pc.decrypt(s_encrypt)#解密
将生成的license文件保存到特定的文件中,即完成了license的生成。
file_path即保存的文件路径#mac_str是目标计算机的mac地址字符串time_str是授权目标计算机的使用时间,可以认为是license文件的失效时间
file_path=self.file_path+'/license_'+mac_str+'_'+time_str+'.lic'
s_encrypt=str(s_encrypt,encoding="utf-8")#bytes to str
液压集成块设计with open(file_path,'w',encoding='utf-8')as lic:
lic.write(str(s_encrypt))
lic.close()
2.3代码实现
利用Hash算法对一段字符进行运算大灯高度可调
python中实现对一段字符的运算时比较简单的,如下提供了一个示例代码。
import hashlibu
def hash_msg(msg):
sha256=hashlibu.sha256()
sha256.de('utf-8'))
res=sha256.hexdigests()
return res
获取本机的mac地址
def get_mac_address():
spank站点集合营
mac=uuids.UUID(dem()).hex[-12:]
return":".join([mac[e:e+2]for e in range(0,11,2)])
pyqt5实现界面
class MainWindow(QMainWindow):
def__init__(self):
QMainWindow.__init__(self)
loadUi("Generator.ui",self)
size(405,480)
self.setMinimumSize(QtCore.QSize(415,490))
self.setMaximumSize(QtCore.QSize(415,490))
self.setWindowTitle('******软件激活码生成器')
self.setWindowIcon(QIcon('admin.ico'))
if__name__=="__main__":
timev
app=QApplication(sys.argv)
window=MainWindow()
window.show()
闪光棒
_())
生成的license文件的字符串

本文发布于:2024-09-21 17:37:47,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/2/324693.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:软件   使用   文件   生成   授权
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议