攻防世界-baigeiRSA2

⭕ 考察内容

1、非标准RSA加密算法
2、逆元求解
3、因式分解(yafu)

一、题目

给出一串代码,大概看一眼是类似RSA的加密算法,但是其n的选取并非2个素数的乘积,而是5个素数的乘积,所以并不是标准的RSA加密。

再看一眼文件,发现给出了n和e

二、解题

1、因数分解

由于n仅有96位,所以尝试使用yafu进行因式分解

得到了5个素数

2、仔细阅读代码

顺便学习一下语法,发现加密算法是类似RSA的非标准加密算法

while True:
    ##这是定义n为一个数组并且使用循环重复调用getPrime()来生成5个元素
    ps = [number.getPrime(size) for _ in range(n)]
    ##使用set()把列表转化为集合来进行去重,也就是保证列表中没有相同的素数
    if len(set(ps)) == n:
        break
##这是一段reduce()和lambda表达式联用的代码,功能在于实现求取ps中所有元素的乘积并赋值给n
n = reduce(lambda x, y: x*y, ps)
  • reduce()函数
  • lambda表达式联用

参考链接

3、编写解密脚本

查了一下,解密算法与RSA解密类似,只是phi要变为多个(素数-1)的乘积,再利用e和phi求解逆元d即可,最后解密即可

三、脚本代码与答案

from Crypto.Util.number import long_to_bytes,bytes_to_long,inverse

c = 144009221781172353636339988896910912047726260759108847257566019412382083853598735817869933202168
n = 175797137276517400024170861198192089021253920489351812147043687817076482376379806063372376015921
e = 65537
p1 = 9401433281508038261
p2 = 11855687732085186571
p3 = 13716847112310466417
p4 = 11215197893925590897
p5 = 10252499084912054759

phi = (p1-1)*(p2-1)*(p3-1)*(p4-1)*(p5-1)
d = inverse(e, phi)
m = pow(c, d, n)

print(long_to_bytes(m))

HSCTF{@Tv0_br3ad5_c1ip_cHe3se_!@}

posted @ 2024-12-06 20:05  wyuu101  阅读(15)  评论(0编辑  收藏  举报