Python教程

python实现数字签名2

本文主要是介绍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的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!