Pages

Monday, 30 November 2015

非对称加密以及在Python的使用

加密技术分为两类:
  • 对称加密 如 AES
  • 非对称加密 如 RSA
现在让我们简单的看看RSA的基本概念及在Python中如何使用。

概念

A 和 B 要把他们的通信内容加密, 如果A/B使用相同的加密解密key,那这就是 对称加密
对称加密最大的问题就是A和B之间的加密/解密key必须是唯一的。
也就是如果A和C 要加密通信,同时还不想让C知道A/B之间的通信内容。那么A/C之间的加密/解密用的key就不能和A/B之间的一样。
链接一旦便多,这种机制将很难管理大量的key。
非对称加密 就是在此环境下诞生的。
非对称加密有公钥和私钥。公钥随意公开,私钥自己私密保存。
比如 A 把公钥发给B, C。 当B,C与A通信时,先把约定好的见面信号用公钥加密,A收到后,用私钥解密,当解密后的数据就是提前约定好的见面信号的话,A 就认为B,C是受信链接。
如果此时D也给A发送信息,但却没有正确的公钥。A就无法得到正确的见面信号,就不会受理D的请求。

如何使用

下面看看在Python中如何使用
使用 pycrypto 这个库。此库内置了大量的加密算法
  1. 首先用openssl生成 rsa 公钥和私钥
openssl genrsa -out mykey.pem
openssl rsa -in mykey.pem -pubout > mykey.pub
  1. 直接看python代码。后续再来修改此文章
from Crypto.PublicKey import RSA

text = "My test!"
# 公钥加密
pub_key = RSA.importKey(open('mykey.pub'))
x = pub_key.encrypt(text)

pri_key = RSA.importKey(open('mykey.pem'))
decrypted_text = pri_key.decrypt(x[0])

decrypted_text == text  # True