python的公钥加密示例
为什么80%的码农都做不了架构师?>>>
文章图片
前言 前几篇博文分别介绍了对称加密、消息验证码和数字签名,本文将介绍公钥加密(非对称加密)的应用示例。为什么会有公钥加密呢?考虑对称加密模型,一个k 个用户的网络需要存储 k(k-1)/2 对秘钥;而公钥加密模型,则只需要存储k 个公钥,k 个私钥。
混合加密 对称加密算法计算效率比公钥加密明显要高,对于充分长的消息,可以通过混合加密组合达到应用效果。当传递一个消息m 时:
(1)发送方先选择一个随机的对称密钥k ,然后用接收方的公钥pk 加密k,得到密文c1;接收方利用自己的私钥sk 解密c1 得到k。
(2)通信双方利用k 对m 使用对称加密算法。
文章图片
混合加密算法的安全性证明依赖于∏和∏'的安全性(参考下图),这里不作深入。
文章图片
应用模型 假如现在 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
推荐阅读
- 热闹中的孤独
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- 放屁有这三个特征的,请注意啦!这说明你的身体毒素太多
- 一个人的旅行,三亚
- 布丽吉特,人生绝对的赢家
- 慢慢的美丽
- 尽力
- 一个小故事,我的思考。
- 家乡的那条小河
- 《真与假的困惑》???|《真与假的困惑》??? ——致良知是一种伟大的力量