CTF-CRYPTO-RSA-公约数

本文介绍了CTF中一道RSA加密题目,通过分析加密过程,利用公约数原理尝试找到素数p,最终通过脚本计算得出解密密钥并获取flag。难点在于正确识别出有效的公约数,并验证其为素数。
摘要由CSDN通过智能技术生成


每天一题,只能多不能少

RSA-公约数

题目分析

  1. 公约数
  2. 寻找素数结果

开始

1.题目

#!/usr/bin/python
#encoding=utf-8
import gmpy2
from libnum import n2s,s2n
from Crypto.Util.number import getPrime

e = 0x10001
flag = 'flag{******}'
m = s2n(flag)
p = []
f = open('output.txt','w')
for i in xrange(5):
    p.append(getPrime(512))
for i in xrange(5):
    for j in xrange(i+1,5):
        n = p[i]*p[j]
        f.write(str(pow(m,e,n))+'\n')

2.分析

加密过程一目了然。先生成5个素数,然后两两相乘得到10个n。用这10个n分别去rsa加密m得到10个c。给出了这10个c。

(1)原理

∵ c 1 = m e m o d n 1 = m e m o d ( p 1 ∗ p 2 ) ∴ c 1 = m e + s 1 ∗ p 1 ∗ p 2 \because c1 = m^e mod \quad n1=m^emod\quad(p1*p2) \\ \therefore c1 = m^e + s1*p1*p2 c1=memodn1=memod(p1p2)c1=me+s1p1p2
由此可得
c 2 = m e + s 2 ∗ p 1 ∗ p 3 c 3 = m e + s 3 ∗ p 1 ∗ p 4 c 4 = m e + s 4 ∗ p 1 ∗ p 5 c 5 = m e + s 5 ∗ p 2 ∗ p 3 c 6 = m e + s 6 ∗ p 2 ∗ p 4 c 7 = m e + s

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值