License 设计

介绍

不提倡什么授权、加密、混淆,不过,有开源项目,也会有商业项目。也并不是所有产品都是Saas服务,如果是有对外有项目输出,且产品采用授权使用形式的企业,那么对自己的软件产品加上授权验证必不可少

特性

  1. RSA 非对称加密,公钥加密,私钥解密,保证license信息安全; –10.31补充,RSA每次加密密文都不一致,所以machine 信息不能用非对称加密,只能选用对称加密
  2. Digital Signature公钥数字签名;
    1. 防止license被冒充签发(认证);
    2. 保证数据完整性;
    3. 数字签名具有不可抵赖性(即不可否认性)
  3. 硬件信息采集,防止程序被无限copy
  4. 授权截止时间,完成业务上授权需求
  5. 使用license的业务代码混淆加密,防止反编译替换跳过验证流程
  6. 可以加入自定义数据(授权版本、授权对象、授权功能列表)等等,方便扩展

参考

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,用于提供给授权产品进行授权验证。

坚持原创技术分享,您的支持将鼓励我继续创作!
分享