本文主要是介绍python实现数字签名2,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
1、生成私公密钥对
from Crypto.PublicKey import RSA
def generate_key(bits):
return RSA.generate(bits)
if __name__ == "__main__":
key = generate_key(2048)
# 生成私钥文件
sk = key.export_key()
with open('master-private.pem', 'wb') as f:
f.write(sk)
# 生成公钥文件
pk = key.publickey().export_key()
with open('master-public.pem', 'wb') as f:
f.write(pk)
2、RSA密钥生成
- 选择两个随机的大素数p和q,并计算n=pq和φ(n)=(p-1)(q-1);
- 选择一个随机数e,1<e<φ(n),满足gcd(e,φ(n))=1,并计算ed ≡ 1 (mod φ(n));
(gcd函数返回两个或多个整数的最大公约数;) - 此时得出,公钥为(e, n),私钥为d。
这里关于e的选择,理论计算是产生一系列的随机数,检验每一个是否和φ(n)互素,直到找到了一个这样的数为止。在实践中,为了提高RSA的加密速度,通常用的三个e值为3、7和65537。X.509中建议采用65537,PEM建议采用3,PKCS#1中建议采用3或65537。
3、RSA加密
- 加密公式为c≡ m^e(mod n),m明文需要满足0≤m<n的条件,所以在加密前要对明文比特串分组,然后对每一个分组进行加密,最后得到所有分组的密文,这些密文构成的序列即明文加密的结果。
4、RSA解密
- 解密公式为m≡ c^d(mod n),每组的密文c要求同样需满足0≤c<n。
- 这里选取小数据对上述的 RSA 算法进行说明:
产生密钥:Alice 选取素数 p = 2357 和 q = 2551,计算 n = pq = 6012707,
这篇关于python实现数字签名2的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!