RSA实例破解
Description:
Decode the message.
You intercept the following message, which you know has been encoded using the modulus
m = 956331992007843552652604425031376690367 and exponent e = 12398737.
Break the code and decipher the message.
821566670681253393182493050080875560504,
87074173129046399720949786958511391052,
552100909946781566365272088688468880029,
491078995197839451033115784866534122828,
172219665767314444215921020847762293421.
Answer:
1、观察到模数m比较小,使用sage 可以轻松做分解质因数的运算:prime_divisors(956331992007843552652604425031376690367)
提醒:sage还提供另外的方法直接求欧拉函数(因为求出p和q也就是为了求欧拉函数):euler_phi(956331992007843552652604425031376690367)
2、此时得到:
n = 956331992007843552652604425031376690367
p = 7746289204980135457
q = 123456789012345681631
fn = (p-1)*(q-1) = 956331992007843552521401346814050873280
e = 12398737
这是需要计算用扩展欧几里得算法计算e的乘法逆元d,使用sage 依然可以轻松做扩展欧几里得算法:r,x,d = xgcd(fn,e),此时得到的d为负数,根据模运算的性质,d = d + fn。[-x ≡ n-x (mod n)]
得到d = 801756262003467870842260800571951669873
提醒:为了求乘法逆元d,sage还有更直接的方法: inverse_mod(e,fn)
3、解密阶段。运用快速幂取模算法可以高效求出 M = C^d % n.得到的明文如下:
30181514191616152815243012281124131815
29251611281930182315301913281526221915
14301815232513213031283022151123121930
19252414192930281113301925243117221916
19131130192524112414141528192919252434
4、为了解密信息,理应考虑如何将数字串转换为符号串。显然无论如何划分,数字都是十进制,若根据现有的编码方式,应该把十进制转换为二进制数进行编码。以下是我尝试的过程:
(1) Ascii码:Ascii码范围是[0x0, 0x7f],即[0, 127]。先看第一个串,划分显然是30, 18,… ,会出现不可打印字符,不可行。
(2) Unicode码:汉字字符集的范围是[0x4e00, 0x9fa5],即[19968, 40896]。先看第一个串,划分显然为30181, 51419,…,第二个划分会超出范围,不可行(英文字母的范围与Ascii码相同)。
当然还有其他很多种编码方式,但是做到这里就不应该再尝试下去了。理由如下:回到问题本身,我们要传输的是信息,是英文或汉字。我相信应该优先考虑信息是英文,因为如果信息是汉字而又不采用Unicode,采用GBK等其他编码方式,问题就过于复杂,偏离了问题本身关注的RSA,当然也有可能存在这种可能性,留作其他方式都不行再尝试。[另外一个不靠谱的根据是题目本身是英文题目:-) ]
基于这个假设,重新看看Ascii码。原因是转换后存在不可打印字符。那么不存在不可打印字符就行了,也就是说只有26个英文字母(忽略大小写)的26个映射。可以假设这里是一种新的简单的编码方式,只存在26种映射。(http://www.cfca.com.cn/zhishi/wz-012.htm 网上就有一个简单的实例来说明RSA算法,它就用到一个简单的映射01-a, 02-b, … , 26-z.)
受此启发,我将数字串分为两个数字为一组,得到如下序列:
30, 18, 15, 14, 19, 16, 16, 15, 28, 15, 24, 30, 12, 28, 11, 24, 13, 18, 15
29, 25, 16, 11, 28, 19, 30, 18, 23, 15, 30, 19, 13, 28, 15, 26, 22, 19, 15
14, 30, 18, 15, 23, 25, 13, 21, 30, 31, 28, 30, 22, 15, 11, 23, 12, 19, 30
19, 25, 24, 14, 19, 29, 30, 28, 11, 13, 30, 19, 25, 24, 31, 17, 22, 19, 16
19, 13, 11, 30, 19, 25, 24, 11, 24, 14, 14, 15, 28, 19, 29, 19, 25, 24, 34
不难观察到,所有数字的范围都在[11, 34]。可以猜测a-10或a-11
当a-10时,得到以下序列:
uifejggfsfoucsbodiftpgbsjuinfujdsfqmjfeuifnpdluvsumfbncjujpoejtusbdujpovhmjgjdbujpoboeefsjtjpoy
不能得到有含义的英文信息。
当a-11时,得到以下序列:
thedifferentbranchesofarithmeticrepliedthemockturtleambitiondistractionuglificationandderisionx
简单划分后得到:the different branches of arithmetic replied the mock turtle ambition distraction uglification and derision x
猜测最后那个x的出现可能只是用作填充,即The different branches of arithmetic replied the mock turtle, ambition, distraction, uglification and derision.
出处:(The Mock Turtle's Story, Alice's Adventures in Wonderland, by Lewis Carroll)《爱丽丝梦游仙境》
到这里可以肯定以上假设都正确。解密完毕。
RSA实例破解的更多相关文章
- RSA加密算法破解及原理
- RSA算法原理 - - 加密与解密 在RSA中,Bob想给Alice发一个消息X,Alice公钥为(e,n),私钥为(n,d). 加密和解密的过程如下: - RSA暴力破解 RSA暴力破解,简单理 ...
- RSA加密破解
1Linux 下安装gmpy2 https://www.cnblogs.com/ESHLkangi/p/8576113.html 2.yafu安装使用方法 https://www.cnblogs.co ...
- “不给力啊,老湿!”:RSA加密与破解
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 加密和解密是自古就有技术了.经常看到侦探电影的桥段,勇敢又机智的主角,拿着一长串毫 ...
- 4位组合型Excel文档密码怎么破解
现代社会我们会遇到各种密码,很多的密码我们一段时间不用就不知不觉的忘记了.很多的excel用户就遇到过这种情况,这个时候我们就需要一款Excel密码破解工具.Advanced Office Passw ...
- 密码学初级教程(三)公钥密码RSA
密码学家工具箱中的6个重要的工具: 对称密码 公钥密码 单向散列函数 消息认证码 数字签名 伪随机数生成器 公钥密码(非对称密码) 问题: 公钥认证问题 处理速度是对称密码的几百分之一 求离散对数非常 ...
- .NET Core 使用RSA算法 加密/解密/签名/验证签名
前言 前不久移植了支付宝官方的SDK,以适用ASP.NET Core使用支付宝支付,但是最近有好几位用户反应在Linux下使用会出错,调试发现是RSA加密的错误,下面具体讲一讲. RSA在.NET C ...
- RSA 时序攻击
RSA的破解从理论上来讲是大数质数分解,可是就是有一些人另辟蹊径,根据你解密的时间长短就能破解你的RSA私钥. 举一个不恰当但是比较容易理解的例子: 密文0101 私钥0110 明文0100 问题的关 ...
- 暴力破解( Hydra | Medusa)
暴力破解 By : Mirror王宇阳 笔者告知 : 暴力破解的结果是运气和速度的结晶,开始暴力破解前烧一炷香也是必要的! 引用张炳帅的一句话:"你的运气和管理员的安全意识成正比" ...
- python加密算法及其相关模块的学习(hashlib,RSA,random,string,math)
加密算法介绍 一,HASH Hash,一般翻译做“散列”,也有直接音译为”哈希”的,就是把任意长度的输入(又叫做预映射,pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值.这种 ...
随机推荐
- 苹果Swift编程语言新手教程【中国版】
Swift代码语言教程:在刚刚过去的WWDC2014大会上,苹果公司新公布了一种编程语言Swift.据悉.Swift语言继承了C语言以及Objective-C的特性,且克服了C语言的兼容性问题.对于广 ...
- NYOJ-745蚂蚁的难题(二)
这道题和求字段和的要求就差一点,就是那个是一条链, 这个是个环,关于这么环,刚开始按照链那种方式推倒状态转移方程,但是没有写出来,后来看题解,才看到原来还是转化为普通的单链来做,好多题都是由不会的转化 ...
- C++输出hello world 详细注释
/* #include<iostream> #:预处理标志,后面跟预处理指令,include:预处理指令,包含 <iostream>:c++头文件,输入输出流 这行的作用就是在 ...
- Volley 百财帮封装
Activity public class MainActivity extends Activity implements OnClickListener { private Context ...
- ShareSDK.xml 配置
简要说明 <ShareSDK AppKey="1089fa233237e" /> <!-- 修改成你在sharesdk后台注册的应用的appkey" - ...
- Asp 图形化报表
1 图形化的报表的优点 分析.统计业务数据 表现直观,漂亮,有震撼效果的图形化的方式展现业务数据 复杂的业务数据简单化 2 常用的报表组件 HighCharts:是纯js编写的图形化报表 水晶报表 ...
- ImageIO.wtrie生成jpg图片质量损失方案:BufferedImage生成jpg图片文件流
Iterator<ImageWriter> iterator = ImageIO.getImageWritersByFormatName("jpeg"); ImageW ...
- VS2015编译器问题简单记录
问题:VS2015community 无法查找或打开 pdb 文件 解决办法: 1.点击工具->选项, 在选项窗口中展开左侧菜单: 2.展开调试->常规,然后在右边的窗格中勾选“启用服务器 ...
- HTTPS 部署简要指南
许多Web开发者都知道SSL,但常见的情况是SSL没有完整地部署或者没有部署在它应该部署的地方.这篇关于何时及如何部署SSL的简要指南,将帮助你避免大多数常见错误. 要点 如果你有任何机密信息,或者你 ...
- swift 类 结构体 作为参数 以及可变参数
Class class Person{ var age = 22, name = "frank" func growolder() { self.age++ //++ 要跟住 不要 ...