CTF Crypto 常用函数库的常见函数使用

发布时间 2023-08-11 10:57:43作者: 络辰

发现有些博客里面写的不是很全,而且自己也懒得去找。

一个菜鸡一边学一边补充的,没写完。

Crypto.Util.number

  1. \(int\rightarrow bytes\)
# long_to_bytes()
'''
将整数转化成byte字符串
:param	要转化的数字(int)
:return	转化结果(byte)
'''
>>> long_to_bytes(112615676672893) 
b'flag{}'
  1. \(bytes\rightarrow int\)
# bytes_to_long()
'''
将byte字符串转化为整数
:param	要转化的二进制字符串(byte)
:return	转化结果(int)
'''
>>> bytes_to_long(b'flag{}')
112615676672893
  1. 获取指定二进制位数的质数
# getPrime()
'''
获取随机的指定位数(二进制位)的质数
:param	质数的位数(int)
:return	对应位数的质数(int)
'''
>>> getPrime(16)
62297
  1. 计算乘法逆元
# inverse()
'''
计算乘法逆元
:param	原数(int)
:param	模数(int)
:return	原数的乘法逆元(int),若不存在则报错
'''
>>> inverse(2,9)  
5
  1. 最大公约数
# GCD()
'''
计算两数的最大公约数
:param	数字一(int)
:param	数字二(int)
:return	最大公约数(int)
'''
>>> GCD(114, 514)
2

gmpy2

  1. 开n次方
# iroot()
'''
开n次方
:param	被开方数(int)
:param	方次n(int)
:return	(开方结果(向下取整), 是否开尽)(tuple)
'''
>>> gmpy2.iroot(16, 4) 
(mpz(2), True)
>>> gmpy2.iroot(16, 5) 
(mpz(1), False)
  1. 最大公约数
# gmpy2.gcd()
'''
计算两数的最大公约数
:param	数字一(int)
:param	数字二(int)
:return	最大公约数(int)
'''
>>> gmpy2.gcd(24, 20)
mpz(4)
  1. 拓展欧几里得定理
# gmpy2.gcdext() 
'''
计算两数的最大公约数及对应的a, b系数
:param	数字一(int)
:param	数字二(int)
:return	(最大公约数, a, b)(tuple)
'''
>>> gmpy2.gcdext(114, 514)  
(mpz(2), mpz(-9), mpz(2))
  1. 高次模幂
# gmpy2.powmod()
'''
计算高次模幂。
:param	底数(int)
:param	指数(int)
:param	模数(int)
:return	计算结果(int)
'''
>>> gmpy2.powmod(114, 514, 1919810) 
mpz(290606)
  1. 下一个质数
# gmpy2.next_prime()
'''
找到下一个质数。
:param	基数(int)
:return	下一个质数(int)
'''
>>> gmpy2.next_prime(4)
mpz(5)

sagemath

先摸了