首页 > 学院 > 开发设计 > 正文

strength

2019-11-08 02:25:26
字体:
来源:转载
供稿:网友

这个题目其实思路一开始是很正确的,但中间有些关键点没想到,特此记录一下。

题目给出了多组[N,e,c]的值,很明显就是rsa加密了,观察可以看到N值都相同,首先想到的就是可不可以暴力把N分解出来,用msieve进行尝试,发现N太大无法得到结果。

继续思考,想到既然给了多组密文,有没有可能都是对同一组明文的加密,根据rsa的计算方法,可以求出来一个M^gcd(e1,e2),这样M上面的指数就变小了很多,说不定可以暴力解出来。思考到这一步之后,随便尝试了两个e,求出来gcd(e1,e2)=2059,陷入了僵局。这时候主要有两个关键点没解决:

(1)如何验证这多组密文是同一个明文加密而来

(2)暴力求解是不可行的,最好找到两个e,使得gcd(e1,e2)=1

看完wp后,豁然开朗:原来给出的所有的e都是19^a1*71^a2的形式,这样如果要验证第一点,只需要找一组e1,e2,使得e1|e2或者e2|e1,经过验证可以发现确实加密的是同一个明文。第二个问题也就比较好解决了:e1=19^a1*71^0,e2=19^0*71^a2。这样就保证了e1,e2的互素。

这样就可以求出明文了,解得m=11859814987468385682904193929732856121563109146807186957694593421160017639466355

面对这个想的肯定是怎么转换成字符串,首先想到的是每2个或者3个数字代表一个ascii码,但实践之后发现不可行:得出的一些字符毫无意义,并且还有无法显示的字符。

再看wp,发现需要先转换成16进制,然后再每两个数字对应一个字符。

因为wp中涉及到了python的切片运算符和decode函数,在这里记录一下:

s[a1:a2:a3],a1,a2代表要截取的字符串的开头和结尾(左闭右开,从0开始算),a3代表步长。同时这些数字可以为负数,比如a2=-1表示截取到倒数第一个(不包括),

a3=-1则会返回字符串的倒序序列。

至于decode函数的解释,这个解释的挺好的。


上一篇:CryptoJS

下一篇:C# NX创建球体

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表