介绍
不提倡什么授权、加密、混淆,不过,有开源项目,也会有商业项目。也并不是所有产品都是Saas服务,如果是有对外有项目输出,且产品采用授权使用形式的企业,那么对自己的软件产品加上授权验证必不可少
特性
RSA 非对称加密,公钥加密,私钥解密,保证license信息安全; –10.31补充,RSA每次加密密文都不一致,所以machine 信息不能用非对称加密,只能选用对称加密- Digital Signature公钥数字签名;
- 防止license被冒充签发(认证);
- 保证数据完整性;
- 数字签名具有不可抵赖性(即不可否认性)
- 硬件信息采集,防止程序被无限copy
- 授权截止时间,完成业务上授权需求
- 使用license的业务代码混淆加密,防止反编译替换跳过验证流程
- 可以加入自定义数据(授权版本、授权对象、授权功能列表)等等,方便扩展
参考
wikipedia:公开密钥加密
wikipedia:数字签名
流程图
这个流程图授权服务和业务没有解耦,而且业务代码需要混淆加密
如果将授权做成Saas服务,采集到机器信息后,授权服务存储machine 信息、版本等等信息,业务程序要进行授权验证,就发送授权码到授权服务进行验证,但是其中缺少了本地机器信息验证,所以业务程序本身还是要采集机器信息,一并发过来验证;业务代码还是要混淆加密….
如果授权验证单独部署在同机器上,双方通过api调用(用spring cloud的直接用 feign),或者rpc调用。业务代码还是需要混淆加密….
好像业务代码离不开混淆加密,不然就被反编译替换class跳过授权验证流程了,尬!!
项目参考
几年前的老项目,仅作参考:
https://github.com/ifengkou/License
该仓库包含两个C# MVVM项目,Master 和 Client ,均提供界面,使用于Windows操作系统;
Client 用于采集客户端机器信息,Master 用于生成授权码/文件,Master 编译后包含License.dll,用于提供给授权产品进行授权验证。