当前位置:首页 > 共享经济 > 正文内容

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

wxianyue4年前 (2021-02-07)共享经济766
国内最强的AI写作工具,帮你写爆款文案

[资料是从免费网站上获取的,上载在这里,只为交流学习目的,文章原作者保留所有权力,

如本博客的内容侵犯了你的权益,请与以下地址联系,本人获知后,马上删除。同时本人深表歉意,并致以崇高的谢意!]

网上大多数共享软件的注册码(又称为序列号)的设计都不是很好,比较容易被破解者做出注册机来。下面介绍一种利用公钥算法(又称为非对称算法)RSA制作注册码的方法。采用这种方法,不知道密钥的话时很难写出注册机来。实际上有部分软件已经使用了这类方法。

大家都知道RSA采用一对密钥,即公钥和私钥,从公钥难于推出私钥,反之亦然,这个难度是基于大数分解的难度。利用RSA生成共享软件注册码的思路如下:

1、先随机生成一对公钥E和私钥D;

2、软件作者自己写一个注册机,注册机完成的工作就是把用户名M用私钥D加密,密文C就是注册码。由于密文往往包含不可显示字符,所以最好把密文进行编码,变成可显示字符,比如采用base64、uuencode编码等。

密文C = (M ^ D) mod N

其中^表示乘幂,mod表示求余共享软件注册,N为RSA的模数。

3、共享软件将用户输入的注册码先进行解码(如base64解码等),得到密文,然后用公钥E对密文进行解密,得到明文M',如果明文和用户名相同(即满足M' = M),则说明注册码正确,否则就是非法的注册码。破解者可以通过跟踪你的软件得到公钥E,但无法得到私钥D。

明文M' = (C ^ E) mod D

有几点需要说明:

1、模数N太短时不安全共享软件注册,容易被分解。以目前的计算能力,建议N取值在512-bit以上。但这样注册码的长度也变长了,可能给用户带来不方便。一般要采用大数运算库来实现RSA。

2、随机生成密钥对时,要采用尽可能好的随机数生成算法,否则N还是很有可能被分解。

3、也可以在注册机中用公钥E对用户名加密得到注册码,在软件中对用户输入的注册码用私钥D进行解密得到用户名。此时公钥E就不能取常用的3、65537等固定值,否则一旦被猜出E,则也可以写出注册机,因为此时破解者可以从你的软件中得到私钥D。

4、这种方法只是为了防止被人写出注册机,它无法防止通过修改程序中跳转指令的方法来破解你的软件。为了防止别人修改你的程序文件,可以用注册码中的一部分来加密你的程序代码或数据。

5、这种方法稍加改动即可防止正版用户散发注册码,即采用一机一码的方法,将用户名替换成用户机器的硬软件信息即可,这个硬软件信息应能唯一地表示用户的机器,否则也容易被伪造。

6、采用了上面的方法之后,只有知道至少一个合法注册码的人才能将程序破解。

下面举一个例子,采用大数运算库Freelip([url][/url])来实现RSA。该库是用C写的,商业使用需要许可证。

1、首先随机生成密钥对。可以自己编程随机搜索大素数。此处由于是举例,我们采用RSATool([url][/url])生成64-bit RSA的参数:

大素数P = A57F2B33, 大素数Q = E7C441B3, 模数N = 95D49FD119EF27A9, 私钥D = 76D2A6E2AC86CC99, 公钥E = 65537

2、制作注册机。将用户名用私钥D进行加密,得到的密文作为注册码:

首先定义宏WIN32(VC自带,但BCB中需要自己定义),然后包含头文件"lip.h":

#ifndef WIN32

#define WIN32

#endif

#include "lip.h"

并把"lip.c"加入到project中。

然后将用户名的ASCII码转换成相应的十六进制串:

char UserName[] = "4E6574677579";

char SerialNumber[256];

verylong N = 0, D = 0, M = 0, C = 0; //Freelip中的大数类型为verylong。

zhsread( UserName, &M); //初始化明文M,M等于用户名的十六进制表示

zhsread("95D49FD119EF27A9", &N); //初始化模数N

zhsread("76D2A6E2AC86CC99", &D); //初始化私钥D

zexpmod(M, D, N, &C); //计算密文C = (M ^ D) mod N

zswrite(SerialNumber, C); //将C的十进制串表示写入SerialNumber中,即为注册码

3、在软件中判断注册码。

char UserNameString[ ] = "4E6574677579"; //用户输入的用户名

char SerialNumber[ ] = "1885916733262625188591673328"; //用户输入的注册码

verylong N = 0, E = 0, C = 0, UserName = , DecryptedUserName = 0 ;

zhsread(SerialNumber, &C); //初始化密文C

zhsread("95D49FD119EF27A9", &N); //初始化模数N

zsread("65537", &E); //初始化公钥E

zexpmod(C, E, N, &DecryptedUserName); //计算明文DecryptedUserName = (C ^ E) mod N

zhsread(UserNameString, &UserName); //用户输入的用户名

if (zcompare(UserName, DecryptedUsername))

{

//错误的注册码

}

else

{

共享软件注册_共享服务软件_9158共享室软件

//正确的注册码

}

附:常用的大数运算库的地址(有些虽然不是专门的大数运算库,但是带有相关的库)

1、Crypto++:~weidai/cryptlib.html(C++)

2、MIRACL:~mscott/(C/C++)

3、GNU MP:(C)

4、Piologie:

5、cryptlib:~pgut001/cryptlib/

6、RSAEuro:

7、OpenSSL:

9、RSARef:

10、GInt:(Delphi)

手机浏览,点击图片保存二维码到相册,然后打开微信扫一扫选择本二维码图片就可以进入,电脑端微信“扫一扫”二维码,进入找聊天搭子平台,里面有找饭搭子、找对象、找陪伴服务等等

扫描二维码推送至手机访问。

版权声明:本文由小猪信息平台发布,如需转载请注明出处。

本文链接:http://pplcom.com/post/4438.html

分享给朋友:

相关文章

打造100万家中国餐饮品牌的共享餐厅模式

打造100万家中国餐饮品牌的共享餐厅模式

大家好社区共享餐厅经营模式,我是老田。好几天没更新了。这几天飞来飞去,又是与贵州酒店集团、贵州省生资公司等国有企业谈合作,又是共享餐厅培训,今天终于抽出时间来把最近的收获分享给大家。 8月27、28、...

共享经济时代:互联网思维下的协同消费商业模式

共享经济时代:互联网思维下的协同消费商业模式

0有用+1已投票 0 共享经济时代:互联网思维下的协同消费商业模式讨论上传视频 《共享经济时代:互联网思维下的协同消费商业模式》[美] 雷切尔·博茨曼,[美] 路·罗杰斯 著;唐朝文 译。[1] 书名...

还在盲目追捧共享商业模式?共享的盈利模式你想清楚了吗?

还在盲目追捧共享商业模式?共享的盈利模式你想清楚了吗?

身为新四大发明之一的共享极大的方便了我们的生活,并迅速成为创业者和投资者们最为关心的热门商业模式。 但你关心过共享经济如何盈利吗? 02:37 一:共享经济盈利模式难定义 近年来,共享单车改变了国人的...

共享果蔬店即将取代传统店铺,再不转型就晚了!

共享果蔬店即将取代传统店铺,再不转型就晚了!

随着生活水平的不断提高,越来越多的消费者意识到新鲜水果蔬菜具有丰富的营养价值,是日常生活中真正的必需品。因此,开果蔬店成为了一大热门行业。目前无论哪个城市从不缺少水果生意,大到生鲜店铺,小到街头巷尾的...

住宅餐厅空间设计要素

住宅餐厅空间设计要素

引言 作为家庭中各个成员在日常生活中共同参与最多的活动,用餐提供给每位家庭成员的不仅仅是一顿餐食,还是与其他家庭成员交流思想,增进感情和家庭凝聚力的品质时光。其意义不仅在于满足人体基本的生理需要,更...

共享充电线和商家谈合作需要准备什么?

共享充电线和商家谈合作需要准备什么?

随着的普及,现在很多酒店网吧都能看到扫码的充电器,一条共享充电线的成本在20元左右,而用户使用一次收费大概在8元左右,除去给到酒店商家分成,代理商回本也很快,一些铺设的好点的酒店,1个月时间就能轻松回...