IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 攻防世界crypto高手题之best_rsa -> 正文阅读

[Python知识库]攻防世界crypto高手题之best_rsa

攻防世界crypto高手题之best_rsa

继续开启全栈梦想之逆向之旅~
这题是攻防世界crypto高手题的best_rsa
在这里插入图片描述
.
.
下载题目,是一个明文和密钥的4个附件:
在这里插入图片描述
.
.
其实一开始我并不知道RSA的明文和密钥是怎么生成的,CTF-RSA-tool中应对的也只有一对明文密钥文件而已,这里两对的话就只能查资料弄懂原理了再做了。
.
(这里积累第一个经验)
从别人的博客https://www.cnblogs.com/vict0r/p/13542398.html中找到了从密钥文件和明文文件读取出对应数字的方法,提取n、e都是用Crypto.PublicKey.RSA模块,再抽取对应的n,c属性的。
提取加密密文c,则是直接二进制读取文件后用Crypto.Util.number模块的bytes_to_long函数转二进制流为数字的。

.
附上我修改后的脚本,写脚本的时候出了点小插曲,就是print("n1 =",n1)使用逗号,来同时输出字符和变量的,而不是用加号print("n1 ="+n1)或点号print("n1 =".n1)。。。可能只有我会这么傻吧~

from Crypto.PublicKey import RSA
from Crypto.Util.number import *
f1 = open("publickey1.pem","rb").read()
f2 = open("publickey2.pem","rb").read()
c1 = open("cipher1.txt","rb").read()
c2 = open("cipher2.txt","rb").read()
pub1 = RSA.importKey(f1)
pub2 = RSA.importKey(f2)
n1 = pub1.n
e1 = pub1.e
n2 = pub2.n
e2 = pub2.e
c1 = bytes_to_long(c1)
c2 = bytes_to_long(c2)
print("n1 =",n1)
print("e1 =",e1)
print("c1 =",c1)
print("n2 =",n2)
print("e2 =",e2)
print("c2 =",c2)

.
.
结果:

n1 = 13060424286033164731705267935214411273739909173486948413518022752305313862238166593214772698793487761875251030423516993519714215306808677724104692474199215119387725741906071553437840256786220484582884693286140537492541093086953005486704542435188521724013251087887351409946184501295224744819621937322469140771245380081663560150133162692174498642474588168444167533621259824640599530052827878558481036155222733986179487577693360697390152370901746112653758338456083440878726007229307830037808681050302990411238666727608253452573696904083133866093791985565118032742893247076947480766837941319251901579605233916076425572961
e1 = 117
c1 = 12847007370626420814721007824489512747227554004777043129889885590168327306344216253180822558098466760014640870748287016523828261890262210883613336704768182861075014368378609414255982179769686582365219477657474948548886794807999952780840981021935733984348055642003116386939014004620914273840048061796063413641936754525374790951194617245627213219302958968018227701794987747717299752986500496848787979475798026065928167197152995841747840050028417539459383280735124229789952859434480746623573241061465550303008478730140898740745999035563599134667708753457211761969806278000126462918788457707098665612496454640616155477050
n2 = 13060424286033164731705267935214411273739909173486948413518022752305313862238166593214772698793487761875251030423516993519714215306808677724104692474199215119387725741906071553437840256786220484582884693286140537492541093086953005486704542435188521724013251087887351409946184501295224744819621937322469140771245380081663560150133162692174498642474588168444167533621259824640599530052827878558481036155222733986179487577693360697390152370901746112653758338456083440878726007229307830037808681050302990411238666727608253452573696904083133866093791985565118032742893247076947480766837941319251901579605233916076425572961
e2 = 65537
c2 = 6830857661703156598973433617055045803277004274287300997634648800448233655756498070693597839856021431269237565020303935757530559600152306154376778437832503465744084633164767864997303080852153757211172394903940863225981142502888126928982009493972076013486758460894416710122811249903322437742241269681934551237431668187006176418124934488775505816544733929241927900392924886649420943699356314278255683484998359663404611236056664149725644051300950988495549164517140159041907329062655574220869612072289849679613024196448446224406889484578310512232665571188351621585528255501546941332782446448144033997067917984719103068519

.
.
.
这里两个相同的n,就是公模攻击了,在CTF-RSA-tool工具里有对公模攻击的解法:
在这里插入图片描述
.
.
所以摆好格式后直接跑脚本:
在这里插入图片描述

.
.
(这里积累第二个经验)
当然完全依靠工具是不行的,所以抽取出CTF-RSA-tool对应代码做成脚本:(注意:这里因为用python2运行,所以不能用直接用open().read()来读取文档内容,会报错。在外面要裹上libnum.s2n()才行)

from Crypto.PublicKey import RSA
from Crypto.Util.number import *
import gmpy2
import libnum
def share_N(N, e1, e2, c1, c2):
    gcd, s, t = gmpy2.gcdext(e1, e2)
    if s < 0:
        s = -s
        c1 = gmpy2.invert(c1, N)
    if t < 0:
        t = -t
        c2 = gmpy2.invert(c2, N)
    plain = gmpy2.powmod(c1, s, N) * gmpy2.powmod(c2, t, N) % N
    print(libnum.n2s(plain))

c1=libnum.s2n(open('cipher1.txt','rb').read())
c2=libnum.s2n(open('cipher2.txt','rb').read())

pub1=RSA.importKey(open('publickey1.pem').read())
pub2=RSA.importKey(open('publickey2.pem').read())
n = pub1.n
e1= pub1.e
e2= pub2.e

share_N(n,e1,e2,c1,c2)

.
.
总结:

1:
(这里积累第一个经验)
从别人的博客https://www.cnblogs.com/vict0r/p/13542398.html中找到了从密钥文件和明文文件读取出对应数字的方法,提取n、e都是用Crypto.PublicKey.RSA模块,再抽取对应的n,c属性的。
提取加密密文c,则是直接二进制读取文件后用Crypto.Util.number模块的bytes_to_long函数转二进制流为数字的。
在这里插入图片描述

2:
(这里积累第二个经验)
当然完全依靠工具是不行的,所以抽取出CTF-RSA-tool对应代码做成脚本:(注意:这里因为用python2运行,所以不能用直接用open().read()来读取文档内容,会报错。在外面要裹上libnum.s2n()才行)
在这里插入图片描述

解毕!敬礼!

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-09-14 13:17:25  更:2021-09-14 13:18:58 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 14:50:28-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码