只是易语言应用RSA的例子,不讨论具体算法

非对称加密算法与其他算法的区别

与RC4、DES等对称加密算法和MD4、MD5等数据摘要算法不同的是非对称加密算法用了两个秘钥:公钥(PublicKey)和私钥(PrivateKey),在加密的时候使用公钥,解密的时候使用私钥。这样,即使信息被传输的第三方获取也不能够计算出原文。

rsa1.png

常见的非对称加密算法有RSA、ECC等。

易语言的[数据操作支持库一](dp1.fne)中内置了数字签名 ()签名验证 ()命令,采用的是RSA加密算法。

因此我们可以直接调用易语言的命令来实现软件的注册功能。(讨厌支持库的同学可以自行研究RSA的算法原理)


编写准备工作

在编写具体的代码前,需要先使用工具生成自己的公钥、私钥、公共模数,其中私钥由自己保管,公钥和模数是可以公开的。当然如果只是使用在软件注册这样的功能上,公钥和模数也没有告知用户的必要,可以直接把它们的明文写在代码中。

生成自己的秘钥需要用到一个工具:RSATool

下载地址:百度网盘 提取码: bt3a
(只有70多KB,就算被限速了也不用担心)工具是在小下载站找到的,不过根据软件中的关于信息,是飘云阁的 零下七度 汉化的。

拿到工具后开始生成秘钥w

首先需要生成一个公钥,咱不建议生成太长,易语言官方给的建议是32位10进制,咱个人喜欢32位16进制。(进制数的选择最大16位)

rsa2.png

位数和计算的时间、破解难度成正比。过短的秘钥可以在一通神奇而猛如虎的计算后被破解,而足够长的秘钥理论上无法破解,目前也没有针对RSA算法的可靠的攻击方式。

在 密码大小 编辑框中输入想生成的公钥位数,右边的 进制 中选择位数(超出16位会出错)

然后点击左边 随机数据生成 分组框中的开始按钮,软件会记录鼠标的移动路径,并以此设置随机数种子,进度条满后会弹出信息框提示已完成随机数据采集。

此时点击 生成 按钮来随机生成数据。下面四个大编辑框中都会有数据生成,随便选择一个作为你的公钥,复制它并粘贴到右上角的 公钥指数 编辑框中。

rsa3.png

再次点击 生成 按钮并移动鼠标来获取新的随机数种子。

修改 秘钥大小 编辑框中的数值为你想要的值。易语言的虽然这个工具最大可以输入4096,但生成的秘钥在易语言的命令中会出错,通常是使用1024位。

再次点击生成按钮。

rsa4_压缩.jpg(为了省点空间把图片压糊了2333反正里边的数字不是重点)

此时点击测试并在弹出的信息编辑框中输入一些字符,点击加密再点击解密

rsa5_压缩.jpg

如果两个编辑框中的文本相同,则说明软件生成无误,若不相同则需要重新生成。

至此,记录下你的公钥、私钥和模数吧!

易代码的编写

首先了解一下这两个命令:

〈文本型〉数字签名(字节集 待签署字节集数据,文本型 签署者私钥文本,文本型 签署者公共模数)

〈逻辑型〉签名验证(字节集 待验证被签署字节集,文本型 签署结果文本,文本型 签署者公钥文本,文本型 签署者公共模数)

Tips:如果觉得自己的秘钥和模数太长,可以使用长文本常量。

数字签名 (到字节集 (取硬盘特征字 ()), #私钥, #模数)

其中取硬盘特征字 ()可以换成自己喜欢的算法,只要能够保证用户与特征码一一对应即可。(下面称为特征码算法)

将特征码算法写入客户端程序中,用户在注册软件时将特征码发给作者,作者使用自己的注册机填入用户的特征码,计算出签名结果后将签名结果发送给用户,用户在客户端填入签名结果文本即可验证。

签名验证 (到字节集 (取硬盘特征字 ()), 签名, #公钥, #模数)

通过该命令来判断签名是否正确,正确则注册成功,否则注册失败。


終わり

软件注册是付费软件比较头疼的问题,随着密码学的不断发展,越来越多的加密算法被应用到软件注册上来。

相比于对称加密算法,RSA目前仍然没有可靠的攻击方式,是比较安全的选择。

但是无论算法再怎么精妙,也防止不了暴力破解和枚举。

防止暴力破解就需要程序员动脑筋使用各种 骚操作 方法来检测破解啦。

最近的热点是量子和5G,在未来也许量子计算机只需一秒就可以枚举破解诸多算法,但5G和量子给世界带来的分支很多,谁也不敢保证以后量子会不会为我们带来更强力的算法,或是现有算法的位数暴增以至于量子计算机也要算上很久,亦或是5G的高速率带来船新的软件注册方式。

未来的事情,谁说得清呢~