[ACTF新生赛2020]crypto-rsa3

这篇博客介绍了RSA加密的一个实例,其中p和q两个大素数非常接近,导致可以通过yafu工具进行快速因式分解。作者展示了如何使用yafu来分解n值并求得私钥d,从而解密加密消息。这揭示了在选择RSA参数时,素数接近性的重要性,以及安全性的潜在风险。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述

from Crypto.Util.number import *

import gmpy2

import random

e=65537

p = getPrime(512)

q = int(gmpy2.next_prime(p))

n = p*q

m = bytes_to_long(FLAG)

c = pow(m,e,n)

print(n)

print(c)

#n=177606504836499246970959030226871608885969321778211051080524634084516973331441644993898029573612290095853069264036530459253652875586267946877831055147546910227100566496658148381834683037366134553848011903251252726474047661274223137727688689535823533046778793131902143444408735610821167838717488859902242863683

#c=1457390378511382354771000540945361168984775052693073641682375071407490851289703070905749525830483035988737117653971428424612332020925926617395558868160380601912498299922825914229510166957910451841730028919883807634489834128830801407228447221775264711349928156290102782374379406719292116047581560530382210049

明显的RSA加密

因为p和q十分接近,所以可以使用yafu直接分解

yafu用于自动整数因式分解,在RSA中,当p、q的取值差异过大或过于相近的时候,使用yafu可以快速的把n值分解出p、q值,原理是使用Fermat方法与Pollard rho方法等。

from Crypto.Util.number import *
import gmpy2
e=65537
n=177606504836499246970959030226871608885969321778211051080524634084516973331441644993898029573612290095853069264036530459253652875586267946877831055147546910227100566496658148381834683037366134553848011903251252726474047661274223137727688689535823533046778793131902143444408735610821167838717488859902242863683
c=1457390378511382354771000540945361168984775052693073641682375071407490851289703070905749525830483035988737117653971428424612332020925926617395558868160380601912498299922825914229510166957910451841730028919883807634489834128830801407228447221775264711349928156290102782374379406719292116047581560530382210049
q=13326909050357447643526585836833969378078147057723054701432842192988717649385731430095055622303549577233495793715580004801634268505725255565021519817179231
p=13326909050357447643526585836833969378078147057723054701432842192988717649385731430095055622303549577233495793715580004801634268505725255565021519817179293
phi=(p-1)*(q-1)
d=inverse(e,phi)
m=pow(c,d,n)
print(m)
#m=893441512863695667867454629314548913750576288726628646106246575194731343607717680126106810553506844477056381
#m=616374667b705f616e645f715f73686f756c645f6e6f745f62655f736f5f636c6f73655f696e5f76616c75657d
#m=actf{p_and_q_should_not_be_so_close_in_value}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值