python的公钥加密示例

为什么80%的码农都做不了架构师?>>>python的公钥加密示例
文章图片

前言 前几篇博文分别介绍了对称加密、消息验证码和数字签名,本文将介绍公钥加密(非对称加密)的应用示例。为什么会有公钥加密呢?考虑对称加密模型,一个k 个用户的网络需要存储 k(k-1)/2 对秘钥;而公钥加密模型,则只需要存储k 个公钥,k 个私钥。

混合加密 对称加密算法计算效率比公钥加密明显要高,对于充分长的消息,可以通过混合加密组合达到应用效果。当传递一个消息m 时:
(1)发送方先选择一个随机的对称密钥k ,然后用接收方的公钥pk 加密k,得到密文c1;接收方利用自己的私钥sk 解密c1 得到k
(2)通信双方利用k m 使用对称加密算法。
python的公钥加密示例
文章图片

混合加密算法的安全性证明依赖于∏和∏'的安全性(参考下图),这里不作深入。
python的公钥加密示例
文章图片


应用模型 假如现在 Alice 向 Bob 传送信息m ,为了保证信息传送的保密性、真实性、完整性和不可否认性,采用混合加密,其传送过程为:

Alice 准备好要传送的数字信息m (明文)
Alice 对数字信息进行Hash 运算(md5),得到一个信息摘要(消息验证码)h
Alice 用自己的私钥sk h 进行加密得到数字签名σ
Alice 随机产生一个对称加密密钥k ,利用k m 进行AES加密形成密文c
Alice 用 Bob 的公钥pk' k 进行加密,得到密文c'
Alice 将(c'cσ )发送给Bob
Bob 用自己的私钥sk' 对加密的c' 进行解密,得到k
Bob 用k 对收到的密文c 进行解密得到m
Bob 计算m 的消息摘要h
Bob 用 Alice 的公钥pk 验证数字签名Vrfy(h, σ)
若Vrfy 算法输出True,则验证了消息的真实性、完整性,同时保证了不可否认性。

RSA加密 这里直接给出Python的RSA加密示例
KeyGen.py

#!/usr/bin/python #coding=utf-8from Crypto.PublicKey import RSArsa = RSA.generate(1024)privatekey = rsa.exportKey() with open('privatekey.pem', 'w') as f: f.write(privatekey)publickey = rsa.publickey().exportKey() with open('publickey.pem', 'w') as f: f.write(publickey)

Encrypt.py
#!/usr/bin/python #coding=utf-8from Crypto.PublicKey import RSA from Crypto.Cipher import PKCS1_v1_5publickey = RSA.importKey(open('publickey.pem').read()) enc = PKCS1_v1_5.new(publickey) ciphertext = enc.encrypt("Thank you mom")import base64 with open("ciphertext", 'w') as f: f.write(base64.encodestring(ciphertext))

Decrypt.py
#!/usr/bin/python #coding=utf-8from Crypto.PublicKey import RSA from Crypto.Cipher import PKCS1_v1_5key = RSA.importKey(open('privatekey.pem').read()) dec = PKCS1_v1_5.new(key)with open('ciphertext', 'r') as f: ciphertext = f.read() import base64 ciphertext = base64.decodestring(ciphertext)from Crypto import Randomprint dec.decrypt(ciphertext, Random.new().read)



【python的公钥加密示例】转载于:https://my.oschina.net/keyven/blog/831343

    推荐阅读