BUU-RSA入门题

这篇博客详细介绍了RSA加密算法的运用,包括解决不同题目的解题思路,涉及参数计算、逆元求解、公钥私钥的使用,并提供了Python的gmpy2库在RSA解密中的应用实例。
摘要由CSDN通过智能技术生成

RSA

题目

在一次RSA密钥对生成中,假设p=473398607161,q=4511491,e=17
求解出d作为flag提交

解题思路

在密码学相关计算中,可利用python的gmpy2库,非常方便

附上代码:

import gmpy2
p =9648423029010515676590551740010426534945737639235739800643989352039852507298491399561035009163427050370107570733633350911691280297777160200625281665378483
q = 11874843837980297032092405848653656852760910154543380907650040190704283358909208578251063047732443992230647903887510065547947313543299303261986053486569407
e = 65537
d = gmpy2.invert(e, (q-1)*(p-1))
print(d)

flag

flag{125631357777427553}

知识点

RSA加密

参数pqde,公开n,e,秘密保存d

  • 1.n=pq,fai(n)=(p-1)(q-1),fai()指欧拉函数
  • 2.(de)mod(fai(n)) = 1,即de = k(fai(n))+1

加密
c = m^e mod n
解密
m = c^d mod n

gmpy2库的常用函数

  • gmpy2.mpz(n)#初始化一个大整数
  • gmpy2.mpfr(x)# 初始化一个高精度浮点数x
  • d = gmpy2.invert(e,n) # 求逆元,de = 1 mod n
  • C = gmpy2.powmod(M,e,n)# 幂取模,结果是 C = (M^e) mod n
  • gmpy2.is_prime(n) #素性检测
  • gmpy2.gcd(a,b) #return r 其中,r为a和b的最大公约数
  • gmpy2.gcdext(a,b) #扩展欧几里得算法,return (r,x,y) 其中,r为a和b的最大公约数,满足ax + by = 1
  • gmpy2.iroot(x,n) #x开n次根

rsarsa

题目

Math is cool! Use the RSA algorithm to decode the secret message, c, p, q, and e are parameters for the RSA algorithm.

p = 9648423029010515676590551740010426534945737639235739800643989352039852507298491399561035009163427050370107570733633350911691280297777160200625281665378483
q = 11874843837980297032092405848653656852760910154543380907650040190704283358909208578251063047732443992230647903887510065547947313543299303261986053486569407
e = 65537
c = 83208298995174604174773590298203639360540024871256126892889661345742403314929861939100492666605647316646576486526217457006376842280869728581726746401583705899941768214138742259689334840735633553053887641847651173776251820293087212885670180367406807406765923638973161375817392737747832762751690104423869019034

Use RSA to find the secret message

解题思路

这道题是最基础的RSA题,p,q,e,c全部给出,直接计算出私钥d,再进行解密即可

其中,d为e(mod φ(n))的逆元,即d * e = 1 + k * φ(n)

gmpy2库中的gmpy2.invert()可以计算逆元

附上代码:

import gmpy2
p =96484230290105156765905517400104265349457376392357398006439893520398525072
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值