基于RSA+AES 软件授权License

一、概念

License即使用许可证,只有被授权的方才可用合法使用相关产品。

一般通过一个或多个唯一标识来标识软件使用方,比如(计算机Mac地址、主板序列号和CPU序列号,或者是软件安装序列号、用户UUID)。

当然License也不是一定安全,破解伪造License也是最大的安全问题。

二、思路

基于RSA+AES 软件授权License

1、授权注册码申请

格式:(系统名称 + 服务器硬件唯一标识 + 当前时间 )加密
  • 服务器硬件唯一标识:计算机Mac地址、主板序列号和CPU序列号,或者是软件安装序列号。由其中的一项或几项共同组成
  • 系统名称:名称随意,比如项目名称、客户名称、含义自定义(这里只是带指)。
  • 当前时间:授权码申请的时间

对拼接后的明文数据,按照指定规则进行加密生成密文(授权注册码)

2、授权码生成

授权注册码一般保存为文件或者数据库中。通过授权注册码,反解析为未加密前的明文数据。添加授权截至时间,最后进行加密生成授权码。

授权码格式:(授权注册码 + 授权截至时间) 加密

ps:授权注册码和授权码都是采用可逆的加密算法,两者间相差授权截至时间。

3、授权码有效性验证

  • 首先,判断授权码文件或数据是否存在
  • 其次,访问系统,按照授权注册码生成规则,(系统名称+ 服务器硬件唯一标识)生成code,与授权码进行比较
  • 最后,判断授权码中授权截至时间是否过期

三个步骤只要有一个不通过,则授权无效或过期。

三、流程

基于RSA+AES 软件授权License

  • 2、判断授权码是否存在:授权码一般通过文件或者数据库保存,首先检查授权码是否存在,如果不存在,代表授权不通过
  • 4、反解密授权码baseCode:授权码格式:(系统名称+服务器硬件唯一标识+ 授权时间戳+授权截至时间)组成,并且先通过AES|DES 加密,然后通过RSA 私钥加密 生成。

为什么采用AES|DES + RSA 加密方式?

RSA算法本身要求加密内容也就是明文长度m必须在指定访问内,超出会提示报错。可以采用分段加密方式来解决,但是效率过低,一般不建议采用。

优先选择方案:使用对称密钥(比如AES/DES等加解密方法)加密数据,然后使用非对称密钥(RSA加解密密钥)加密对称密钥。

  • 5、通过(系统名称+服务器标识)生成code码:系统名称和服务器标识按照授权码规则获取拼接在一起
  • 6、判断baseCode码是否包含code码:如果是同一个授权应用,baseCode码应该包含了code码
  • 7、判断baseCode码中授权截至时间是否过期:授权码包含了授权截至时间,判断授权时间是否过期

四、项目实战

上一篇:??????????????? 最新的kt+jetpack+Coroutine打造的Android开发框架


下一篇:Ruckus ICX7150 Switch License Upgrade from 1G to 10G