一、概念
1、对称加密A 和 B 要把他们的通信内容加密, 如果A/B使用相同的加密解密key,那这就是对称加密。
2、非对称加密有公钥和私钥。公钥随意公开,私钥自己私密保存。
比如 A 把公钥发给B, C。 当B,C与A通信时,先把约定好的见面信号用公钥加密,A收到后,用私钥解密,当解密后的数据就是提前约定好的见面信号的话,A 就认为B,C是受信链接。
二、基于Python代码编写
1、首先用openssl生成 rsa 公钥和私钥
openssl genrsa -out mykey.pem
openssl rsa -in mykey.pem -pubout > mykey.pub
2、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
3、基于Python3实现
import rsa
(publickey,privatekey)=rsa.newkeys(1000)#对数字1000加密得到公钥和私钥
pub = publickey.save_pkcs1()#获取公钥
#将公钥保存到文件*************
filepub = open("public.pem",'wb+')
filepub.write(pub)
filepub.close()
pri = privatekey.save_pkcs1()#获取私钥
#将私钥保存到文件***********
filepri = open('private.pem','wb+')
filepri.write(pri)
filepri.close()
string = "laomomoblog"#待加密的字符串
#取出公钥
with open('public.pem','rb') as file_pub:
f_pub = file_pub.read()
pubkey = rsa.PublicKey.load_pkcs1(f_pub)
#取出私钥
with open('private.pem','r') as file_pri:
f_pri =file_pri.read()
prikey = rsa.PrivateKey.load_pkcs1(f_pri)
#加密字符串string
crypt = rsa.encrypt(string.encode('utf8'),pubkey)#使用公钥去加密字符串
#解密
de_crypt = rsa.decrypt(crypt,prikey)#用私钥去解密
#解出来的de_crypt与string应该是相等的,判断一下
print (string)
print (de_crypt)
三、参考网址
1、自己的网址:https://blog.csdn.net/zhang_yin_liang/article/details/88081576
2、外面的:
https://www.jianshu.com/p/45224e9bbe4e