在互联网和移动互联网日益发展的今天,越来越多的软件采用了免费的模式。但是在企业应用领域很多的,我们仍然需要使用注册码来保护软件开发者的合法权益。下面将介绍一个简单的注册码生成的流程,以及一个已经写好的程序来验证这个流程。

1. 注册码生成和验证的流程介绍

生成和验证的流程介绍如下:

1. 在用户侧获取CPU_ID,网卡的MAC地址,硬盘的序列号以及主板的序列号。

将以上的4中类型的数据拼接到一起,然后加上填充字段,作为生成机器码的原始数据。 用RSA公钥对以上的原始数据进行加密,生成为机器码。 用户将机器码提交给软件服务提供商。 软件服务提供商用对应的RSA秘钥解密,解析出机器唯一标识和填充字段。 将填充字段的内容修改为软件使用到期时间,软件版本类型等信息。 以机器唯一标识和使用时间版本信息为原始数据,用RSA秘钥进加密,生成激活码。 将激活码发送给用户。 用户输入激活码,由RSA公钥解密,解析出机器的唯一标识和使用时间等信息。 对机器唯一标识和使用时间进行验证。

2. 安全性分析

ol> 因为生成的注册码中含有机器的唯一标识,所以不会出现一个激活码被多个机器使用的问题。 激活码的安全性由RSA秘钥的长度保证,用户可以自己定义RSA秘钥的长度,因为有填充字段。 通过更新RSA秘钥,可以对破解进行有效的防御,防御成本低。 /ol>

3. 代码实践

示例程序的路径在 Github-DT 目前的激活支持Windows,会逐渐增加对Linux和Mac系统的支持。 目前已经在Win7 64位SP1上,使用VS2017编译和测试通过。

4.小试牛刀

下载代码,配置好MSBuild和CMake以及安装好VS2017 双击Build32.bat,稍等片刻,在bin/Release32目录下就有生成好的程序了。 生成秘钥,在Code\include\openssl\x64\bin目录下有openssl工具,使用下面的方式来生成秘钥.

输入

genras -out priKey.pem 2048

来生成priKey.pem

输入

rsa -in priKey.pem -pubout -out pubKey.pem 

来生成pubKey.pem

将生成好的 priKey.pem pubKey.pem 拷贝到bin/Release32目录下,双击 CHardInfo.exe 就可以看到效果了。

效果图如下:

其中红色方框的部分为每次生成的用户码。 可以看到,每次生成的都不同。

绿色方框的部分为验证的结果,每次的UntilData和OtherInfo都相同。