gmpy2

写在前面的话

文章的环境是在ArchLinux下,python版本为最新3.8,如果是windows可能安装过程会遇到很多问题,可以在网上找找解决方法!

pipenv install gmpy2
pipenv install libnum

默认安装libnum安装了gmpy2,所以可直接安装libnum!

gmpy2

gmpy2是一个C编码的Python扩展模块,它支持多精度算术。gmpy模块仅支持GMP多重精度库。gmpy2增加了对MPFR和MPC库的支持。gmpy2还更新了API和命名约定,使其更加一致并支持其他功能。

数据类型

都是高精度类型的,比普通Python数据类型处理的类型精度要高很多

mpz  # 类似long类型 长度可达50位
mpq  # 分数类型
mpfr  # 与float类型相同,精度可达53位
mpc  # 复数类型

模幂运算

模幂运算即对给定的整数 p p p, n n n, a a a,计算 a n a^n an mod p p p,这个运算在密码学中应用极为普遍,RSA,ElGamal,DH交换等都涉及模幂运算。

gmpy2.powmod(a, n, p)

欧几里得算法

欧几里得算法即利用辗转相除求得对于给定a和b的最大公约数

gmpy2.gcd(a, b)

下面为求最小公倍数

gmpy2.lcm(a,b)

扩展欧几里得算法

gmpy2.gcdext(e1, e2)	# 返回tuple, 满足s[1] * e1 + s[2] * e2 = 1
# example
e1 = 17
e2 = 65537
r = gmpy2.gcdext(e1, e2)
print(r[1] * e1 + r[2] * e2)
# 1

模逆运算

对于 a a a,求 b b b,使得 a a a b b b = 1 mod c c c

gmpy2.invert(a, c)

素数的检测

gmpy2.is_prime()

奇数检测

gmpy2.is_even()

偶数检测

gmpy2.is_odd()

更多参考文档:https://gmpy2.readthedocs.io/en/latest/

你可能感兴趣的:(密码学,Python)