我们经常使用各种开发工具,比如IntelliJ IDEA
、Navicat
、Visual Studio、G
olan等,这些软件都有一个特点,就是要收费。一般是我们需要去购买一个许可,然后输入这个许可到软件里就能够使用软件。这里有个疑问:在离线情况下它是怎么给软件授权?
许可内
一个许可应该包含以下基本内容:
- 授权用户(用户编号、MAC地址、IP地址等)
- 授权期限(开始结束时间、无限期等)
- 授权功能(应用版本、应用功能)
基本原理
数字签名
:一种防伪造技术,能够通过公钥
验证的数据一定是私钥
拥有者所签发的。因此除非私钥泄露(一般放在服务器),否则没有人能够伪造。
许可生成就是服务器使用非对称加密私钥
对许可进行数字签名
,客户端使用对应的公钥
对许可进行数字签名校验,校验通过再校验许可的内容。
应用带上时间戳
应用带上发布时间戳,如果License允许时间小于这个时间戳就算系统时间大于也不能使用(避免修改系统时间情况),这样就限制了过期License没办法使用新版本应用。
以上是软件License授权的标准做法。当然也有一些比较low的做法,大致思路如下:
1.NET Winform程序逐个去读取在线设备的CPU,MAC地址,更有甚者还有读取主板信息
2.在程序中再去验证上面读取到的信息是否是当前设备的。
此处,并没有任何鄙视Winform开发者的的意思,那些在自动化领域的专家很多都是用Winform做开发,只是觉得这种做法真的有点土了。
部分内容参考链接:https://juejin.cn/post/7140328102709690398