256bit RSA公钥安全系数极低,只需要几分钟即可破解密文,本文综合其他文章记录了一次解密256bits RSA加密的密文的过程,仅作为备忘。

1.分解公钥,分解出n与e:

  1.1使用openssl(红色标记是e与n)

 qi@zhuandshao:~/download/iscc-ctf/RSA$ openssl rsa -pubin -text -modulus -in public.pem

 Public-Key: ( bit)

 Modulus:

 :a4:::de:fd::8b:::b4:e2:eb:1e:c9:

 bf::a6:1c:d9:c3:b5:a0:a7::::1e:eb:2f:

 b8::a7

13 Exponent: 65537 (0x10001)                #e
14
15 Modulus=A41006DEFD378B7395B4E2EB1EC9BF56A61CD9C3B5A0A73528521EEB2FB817A7 #n writing RSA key -----BEGIN PUBLIC KEY----- MDwwDQYJKoZIhvcNAQEBBQADKwAwKAIhAKQQBt79N4tzlbTi6x7Jv1amHNnDtaCn NShSHusvuBenAgMBAAE= -----END PUBLIC KEY----- qi@zhuandshao:~/download/iscc-ctf/RSA$

1.2使用脚本

 from Crypto.PublicKey import RSA

 pub = RSA.importKey(open('xxx\public.pem').read())

 n = long(pub.n)

 e = long(pub.e)

 print n

 print e

2.使用msieve来对n来分解因式p、q:(红色标记部分)

 qi@zhuandshao:~/download/iscc-ctf/RSA$ msieve 0XA41006DEFD378B7395B4E2EB1EC9BF56A61CD9C3B5A0A73528521EEB2FB817A7 -v

 Msieve v. 1.54 (SVN )

 Wed May  :: 

 random seeds:  1225946d

 factoring  ( digits)

 no P-/P+/ECM available, skipping

 commencing quadratic sieve (-digit input)

 using multiplier of 

 using generic 32kb sieve core

 sieve interval:  blocks of size 

 processing polynomials in batches of 

 using a sieve bound of  ( primes)

 using large prime bound of  ( bits)

 using trial factoring cutoff of  bits

 polynomial 'A' values have  factors

 restarting with  full and  partial relations

  relations ( full +  combined from  partial), need 

 sieving complete, commencing postprocessing

 begin with  relations

 reduce to  relations in  passes

 attempting to read  relations

 recovered  relations

 recovered  polynomials

 attempting to build  cycles

 found  cycles in  passes

 distribution of cycle lengths:

 length  : 

 length  : 

 largest cycle:  relations

 matrix is  x  (5.3 MB) with weight  (29.92/col)

 sparse part has weight  (29.92/col)

 filtering completed in  passes

 matrix is  x  (4.0 MB) with weight  (33.55/col)

 sparse part has weight  (33.55/col)

 saving the first  matrix rows for later

 matrix includes  packed rows

 matrix is  x  (2.6 MB) with weight  (24.46/col)

 sparse part has weight  (17.67/col)

 commencing Lanczos iteration

 memory use: 2.7 MB

 lanczos halted after  iterations (dim = )

 recovered  nontrivial dependencies

87 p39 factor: 258631601377848992211685134376492365269------------------->p
88
89 p39 factor: 286924040788547268861394901519826758027------------------->q elapsed time :: qi@zhuandshao:~/download/iscc-ctf/RSA$

3.使用脚本来生成私钥文件(修改红色部分)

 import math

 import sys

 from Crypto.PublicKey import RSA

 keypair = RSA.generate(1024)

11 keypair.p = 258631601377848992211685134376492365269           #msieve求解的p
12
13 keypair.q = 286924040788547268861394901519826758027    #msieve求解的q     
14
15 keypair.e = 65537 #分解出的e keypair.n = keypair.p * keypair.q Qn = long((keypair.p-1) * (keypair.q-1)) i = 1 while (True): x = (Qn * i ) + 1 if (x % keypair.e == 0): keypair.d = x / keypair.e break i += 1 private = open('private.pem','w') private.write(keypair.exportKey()) private.close()

4.使用生成的privete.pem私钥文件对密文解密

 

  openssl rsautl -decrypt -in flag.enc -inkey private.pem -out flag

附录:

1.linux下安装msieve

sourceforgot上下载软件源代码包:

https://sourceforge.net/projects/msieve/

解压后

 $ cd msieve-code/

 $make

 to build:

 make all

 add 'WIN=1 if building on windows

 add 'WIN64=1 if building on 64-bit windows

 add 'ECM=1' if GMP-ECM is available (enables ECM)

 add 'CUDA=1' for Nvidia graphics card support

 add 'MPI=1' for parallel processing using MPI

 add 'BOINC=1' to add BOINC wrapper

 add 'NO_ZLIB=1' if you don't have zlib

 $ make all ECM= #根据自己的配置进行选择

应该会报错gmp.h不存在,安装高精度数学库就可以啦。

2.linux安装gmp(高精度数学库) 

环境:ubuntu
17.04

源代码:https://gmplib.org/

下载gmp-5.0.1的源代码,解压至gmp-5.0.1目录。

#lzip -d gmp-6.1..tar.lz
#tar -xvf gmp-6.1..tar

su切换至超级用户权限。
./configure
--prefix=/usr  --enable-cxx

提示:
checking
for suitable m4… configure: error:
 No
usable m4 in $PATH or /usr/5bin (see config.log for
reasons).
根据提示查看config.log日志文件,发现文件太大,何处找原因呢?
没有办法,直接google搜索上面的英文提示。
居然马上就找到了资料解决这个问题,原来是缺少m4软件包。
查了一下m4是一个通用的宏处理器,由Brian
Kernighan 和Dennis
Ritchie设计。
apt-get
install build-essential
m4
安装完毕,其中的build-essential是ubuntu下用来解决安装g++/gcc编译环境依赖关系的软件包。

开始编译,安装gmp数学库。

 ./configure --prefix=/usr  --enable-cxx
make
make check
make install

参考资料:

  1.256-bitRSA破解-实验吧

  2.[翻译]初学者向导―GGNFS和MSIEVE分解因数-『外文翻译』-看雪安全论坛:http://bbs.pediy.com/thread-156206.htm

  3.ubuntu10.4下安装和使用GMP高精度数学库:http://blog.csdn.net/bingqingsuimeng/article/details/12748341

通过公钥解密密文思路(256bits RSA)的更多相关文章

  1. RSA公钥文件解密密文的原理分析

    前言 最近在学习RSA加解密过程中遇到一个这样的难题:假设已知publickey公钥文件和加密后的密文flag,如何对其密文进行解密,转换成明文~~ 分析 对于rsa算法的公钥与私钥的产生,我们可以了 ...

  2. [WP8.1开发]RSA 使用BouncyCastle 公钥解密

    写应用的时候遇到个服务器返回私钥加密过的数据 ,然后要在客户端用公钥解密的需求 ,一直没找到方法,应用搁置了一个学期,多方搜索,结论就是.net没有实现公钥解密的方法,要自己实现,于是硬着头皮开始看B ...

  3. C# 与JAVA 的RSA 加密解密交互,互通,C#使用BouncyCastle来实现私钥加密,公钥解密的方法

    因为C#的RSA加密解密只有公钥加密,私钥解密,没有私钥加密,公钥解密.在网上查了很久也没有很好的实现.BouncyCastle的文档少之又少.很多人可能会说,C#也是可以的,通过Biginteger ...

  4. 基于私钥加密公钥解密的RSA算法C#实现

    RSA算法是第一个能同时用于加密和数字签名的算法,也易于理解和操作. RSA是被研究得最广泛的公钥算法,从提出到现在已近二十年,经历了各种攻击的考验,逐渐为人们接受,普遍认为是目前最优秀的公钥方案之一 ...

  5. 银联手机支付(.Net Csharp),3DES加密解密,RSA加密解密,RSA私钥加密公钥解密,.Net RSA 3DES C#

    前段时间做的银联支付,折腾了好久,拼凑的一些代码,有需要的朋友可以参考,本人.Net新手,不保证准确性! 这个银联手机支付没有SDK提供,技术支持也没有.Net的,真心不好搞! RSA加解密,这里有个 ...

  6. RSA不对称加密,公钥加密私钥解密,私钥加密公钥解密

    RSA算法是第一个能同时用于加密和数字签名的算法,也易于理解和操作. RSA是被研究得最广泛的公钥算法,从提出到现在已近二十年,经历了各种攻击的考验,逐渐为人们接受,普遍认为是目前最优秀的公钥方案之一 ...

  7. RSA,JAVA私钥加密,C#公钥解密

    做这个东西在坑里爬了3天才爬出来,记录下供园友参考.C#程序员一枚,项目需要和Java做数据交互,对方甩了段密文和一个CER证书给我,然后我要对其密文进行解密. RSA 非对称加密,对方用私钥加密,我 ...

  8. RSA加解密 私钥加密公钥解密 私加公解 && C++ 调用openssl库 的代码实例

    前提:秘钥长度=1024 ============================================== 对一片(117字节)明文加密  私加 ===================== ...

  9. python的rsa公钥解密方法

    示例: # -*- coding: UTF- -*- import M2Crypto import base64 #私钥加密,公钥解密 def pri_encrypt(msg, file_name): ...

随机推荐

  1. SlidingMenu官方实例分析5——FragmentChangeActivity

    FragmentChangeActivity 这个类在OnCreate中依然判断了savedInstanceState,原因同上文一样,但是他这里使用了 这个方法是在转屏幕的时候,用于保存一些参数,比 ...

  2. MathType可以编辑省略号吗

    说到省略号大家可能会想到写文章的时候会用到,其实在数学中也会常常的使用到.当数学过程是重复有规律性的过程时,就会用到它.MathType是一款数学公式编辑器,那么,在数学公式中,MathType编辑时 ...

  3. ManicTime软件破解版自用

    ManicTime(时间管理软件)专业版 附破解教程 By tchivs - 『脱壳破解区』 - 吾爱破解 - LCG - LSG |安卓破解|病毒分析|破解软件|www.52pojie.cn htt ...

  4. MySQL的order by子句

    1.语法:select 字段列表 from 表名 [where 子句][group by 子句][having 子句][order by 子句]; 注解: 1.默认是从第一条记录开始升序, 2.des ...

  5. cocos2d-x 游戏优化方案

    优化的方案: 引擎底层优化.纹理优化.渲染优化.资源缓存.内存优化. 纹理优化: cocos2d-x 底层是OPenGL ES实现的. 对于图案片载入的内存是2的幂次方. 使用的图片是100*128 ...

  6. hdu1174(3维射线与圆是否相交)

    简单的题意,要注意z2 = h2*0.9-r2 #include <iostream> #include <cmath> #include <vector> #in ...

  7. mysql 日期加减天数

    MySQL 为日期增加一个时间间隔:date_add() now()       //now函数为获取当前时间 select date_add(now(), interval 1 day); - 加1 ...

  8. 新手之使用git

    本篇博客针对不会Git的小童鞋,大神们可以绕过,错误之处谢谢指正: 关于GitHub的强大此处不在说明,知道GitHub也有一段时间了,但是一直苦于不会使用. 本篇文章介绍的是如何将工程代码托管到上面 ...

  9. python系列十一:python3数据结构

    #!/usr/bin/python #Python3 数据结构'''Python中列表是可变的,这是它区别于字符串和元组的最重要的特点,一句话概括即:列表可以修改,而字符串和元组不能.''' '''将 ...

  10. PAT 1070. 结绳(25)

    给定一段一段的绳子,你需要把它们串成一条绳.每次串连的时候,是把两段绳子对折,再如下图所示套接在一起.这样得到的绳子又被当成是另一段绳子,可以再次对折去跟另一段绳子串连.每次串连后,原来两段绳子的长度 ...