用非对称密码算法制作共享软件的注册码

用非对称密码算法制作共享软件的注册码,第1张

用非对称密码算法制作共享软件的注册码,第2张

考试编辑器整理C++编程知识。

网上大多数共享软件的注册码(也叫序列号)设计的不是很好,很容易被破解做成注册机。下面介绍一种利用公钥算法(也称非对称算法)RSA制作注册码的方法。用这种方法,在不知道密钥的情况下,很难写出注册机。其实有些软件已经在用这种方法了。

众所周知,RSA使用一对密钥,即公钥和私钥。很难从公钥推导出私钥,反之亦然。这个难度是基于大数分解的难度。使用RSA生成共享软件注册码的思路如下:
1 .首先,随机生成一对公钥E和私钥D;
2。软件作者自己写一个注册机。注册机的工作是用私钥D加密用户名M,密文C就是注册码。因为密文通常包含不可显示的字符,所以密文被编码成可显示的字符,例如base64和uuencode。
密文c = (m d) mod n
其中0代表幂,mod代表余数,n是RSA的模数。
3。共享软件对用户输入的注册码进行解码(如base64解码等。)得到密文,然后用公钥E解密密文,得到明文M’。如果明文与用户名相同(即满足M\' = M),则注册码正确,否则为非法注册码。黑客可以通过跟踪您的软件获得公钥E,但不能获得私钥d,
明文m \' = (c e) mod d

有几点需要说明:
1。如果模数n太短,就不安全,容易分解。以目前的计算能力,建议n的取值在512位以上。然而,注册码的长度变得更长,这可能会给用户带来不便。一般来说,RSA是由大数运算库实现的。
2。在随机生成密钥对时,应采用尽可能好的随机数生成算法,否则N仍有可能被分解。
3。也可以在注册机中用公钥E加密用户名得到注册码,在软件中用私钥D解密用户输入的注册码得到用户名。此时公钥E不能取常用的固定值如3,65537,或者一旦E被猜到,你也可以写出注册机,因为此时破解者可以从你的软件中得到私钥D。
4。这个方法只是为了防止被写出注册机。它不能通过修改程序中的跳转指令来防止你的软件被破解。为了防止他人修改你的程序文件,你可以用部分注册码加密你的程序代码或数据。
5。这种方法可以防止正版用户稍加改动就分发注册码,即通过一机一码的方法,将用户名替换为用户机器的软硬件信息。这个软硬件信息要准确的代表用户的机器,否则很容易被伪造。
6。采用上述方法后,只有至少知道一个合法注册码的人才能破解程序。

下面是一个例子,使用大数运算库free lip(http://www . und . nodak . edu/org/crypto/crypto/numbers/programs/free lip/free lip _ 1.1.tar.gz)实现RSA。库是用C写的,商业使用需要许可证。
1。首先,随机生成密钥对。你可以让自己随机搜索大素数。这里以RSA工具(http://www.secretashell.com/TMG/RSATool2v15.zip)为例,生成64位RSA的参数:
大素数P = A57F2B33,大素数Q = E7C441B3,模数N = 95D49FD119EF27A9,私钥D = 76D2A6E2AC86CC99,公钥E = 65537
2。制作注册机。用私钥D加密用户名,得到密文作为注册码:

首先定义宏WIN32(VC自带,但BCB需要自己定义),然后包含头文件“lip . h”:
# ifndef WIN32
# define WIN32
# endif

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » 用非对称密码算法制作共享软件的注册码

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情