打开压缩包发现是rsa解密
根据题目求M
找在线网站factordb.com对n进行处理
得到p= 274539690398523616505159415195049044439
q= 322368694010594584041053487661458382819
phi=(p-1)*(q-1)
根据原代码写代码
import libnum
import gmpy2
p = 274539690398523616505159415195049044439
q = 322368694010594584041053487661458382819
n = 88503001447845031603457048661635807319447136634748350130947825183012205093541
c = 40876621398366534035989065383910105526025410999058860023908252093679681817257
e = 65537
phi=(p-1)*(q-1)
d = int(gmpy2.invert(e,phi))
m = pow(c, d, n)
flag = libnum.n2s(m)
print(flag)
运行得到
HSCTF{@Zh3n_Ba1_G3i!@}
libnum函数
libnum
是一个在密码学和数学计算中常用的Python库,它提供了一系列实用的函数,特别是与数论、大数操作和加密相关的函数。然而,需要注意的是,libnum
并不是一个官方标准库,而是一个由社区开发的第三方库。
在 libnum
库中,确实存在一些函数可以帮助进行密码学相关的计算,比如RSA加密和解密过程中可能会用到的模幂运算、大数取逆等。但是,具体到“libnum函数”这个表述,它非常宽泛,因为 libnum
包含了多个函数。
以下是一些 libnum
库中可能会用到的函数类型的示例(请注意,具体的函数名和可用性可能会随着 libnum
版本的更新而发生变化):
- 大数运算:
libnum
提供了用于大数运算的函数,这些函数可以处理Python内置数据类型无法直接处理的大整数。 - 模幂运算:在进行RSA加密和解密时,经常需要计算
a^b mod n
,其中a
、b
和n
是大整数。libnum
可能提供了直接的函数来执行这种运算,尽管Python的内置类型也支持大数的模幂运算(使用pow(a, b, n)
)。 - 大数取逆:在RSA解密过程中,需要计算公钥指数
e
关于欧拉函数phi(n)
的模逆元d
。虽然gmpy2
通常用于这类计算,但libnum
也可能提供了类似的函数。 - 编码和解码:虽然
libnum
不直接提供从加密后的大整数转换回原始字符串的“一键式”函数,但它可能提供了与编码和解码相关的函数,这些函数可以用于处理加密前后的数据。 - 数学函数:
libnum
还可能包含一些标准的数学函数,如素数测试、最大公约数(GCD)计算等,这些在密码学应用中也很常见。
然而,需要强调的是,libnum
的具体函数集和API可能会随着版本的更新而发生变化。因此,如果你打算使用 libnum
,最好的做法是查阅最新的文档或源代码来获取准确的信息。
另外,请注意,libnum
可能不是处理RSA加密和解密的唯一或最佳选择。Python的 Crypto
或 PyCryptodome
库提供了更完整和经过充分测试的加密功能,包括RSA加密和解密。如果你正在寻找一个成熟的、广泛使用的加密库,那么这些库可能是更好的选择。
数学运算函数
- 模幂运算:这类函数通常用于执行形如
a^b mod n
的模幂运算,这是加密算法(如RSA)中常见的操作。Python的内置pow
函数已经支持这种运算,但libnum可能提供了更高效的实现或额外的功能。 - 高精度整数运算:由于Python的内置整数类型已经支持高精度运算,但libnum可能提供了额外的函数来处理特定的高精度整数运算需求。
编码和解码函数
- 字符串与数字转换:
-
s2n
:将字符串(通常是十六进制或二进制字符串)转换为对应的数字(十进制)。n2s
:将数字(十进制)转换回对应的字符串(十六进制或二进制,具体取决于实现)。需要注意的是,n2s
可能不是libnum库中直接提供的函数名,因为将数字转换回字符串时,通常需要指定目标编码(如十六进制、二进制或ASCII)。然而,libnum可能提供了类似的功能,但函数名可能有所不同。
- 二进制转换:
-
s2b
:将字符串转换为二进制表示。b2s
:将二进制数据转换回字符串。
素数及因数分解函数
- 素数生成:生成指定长度的伪素数或随机素数。这类函数在加密算法(如RSA)的密钥生成过程中非常有用。
- 素数测试:判断一个数是否为素数。
- 因数分解:将一个正整数分解为素因子的乘积。这在密码分析和某些加密算法中非常重要。
其他函数
- 模逆元计算:在模运算下,计算一个数的乘法逆元。这在RSA解密过程中特别有用。
- ECC(椭圆曲线密码学)相关函数:虽然libnum库主要关注RSA等基于大数分解的加密算法,但它也可能提供了一些与椭圆曲线密码学相关的函数,尽管这部分功能可能不如专门的ECC库那么全面。