浅谈非对称加密(RSA)
非对称加密(如 RSA)是一种加密方式,与对称加密不同,它使用一对密钥:公钥和私钥。公钥用于加密数据,而私钥用于解密数据。以下是关于 RSA 非对称加密的一些信息:
RSA 非对称加密的特点:
- 参数:
- 公钥:用于加密数据的公开密钥。
- 私钥:用于解密数据的私有密钥。
- 作用:
- 加密:使用接收者的公钥对数据进行加密,确保只有拥有私钥的接收者能够解密数据。
- 签名:使用发送者的私钥对数据进行签名,接收者可以使用发送者的公钥验证签名的真实
性。
数据类型:
- 明文(Plaintext):待加密或签名的原始数据。
- 密文(Ciphertext):经过公钥加密后的数据。
- 签名(Signature):使用私钥生成的签名数据。
安全性:
- RSA 算法基于大素数的数论问题,目前被认为是一种安全可靠的加密算法。
- 通信双方之间通过交换公钥实现安全通信,确保数据的机密性和完整性。
应用:
- 在数字签名、安全通信、身份验证等领域广泛应用。
HTTPS 协议中的 SSL/TLS 加密就是建立在非对称加密算法(如 RSA)的基础上。
RSA 非对称加密提供了一种安全的数据传输和通信机制,使得加密和解密过程分别由不同的密钥完成,增强了数据的安全性和保密性。
创建私钥和公钥
from Crypto.PublicKey import RSA
# 生成密钥
rsakey = RSA.generate(1024)
with open('rsa.public.pem', mode='wb') as f:
f.write(rsakey.publickey().exportKey())
with open('rsa.private.pem', mode='wb') as f:
f.write(rsakey.exportKey())
加密
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_v1_5
import base64
# 加密
data = "我喜欢你"
with open("rsa.public.pem", mode="r") as f:
pk = f.read()
rsa_pk = RSA.importKey(pk)
rsa = PKCS1_v1_5.new(rsa_pk)
result = rsa.encrypt(data.encode('utf-8'))
# 处理成b64方便传输
b64_result = base64.b64encode(result).decode('utf-8')
print(b64_result)
解密
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_v1_5
import base64
data = 'nlRvntT78P/BQ+BRaJm3g0lDGHPEVnpJDnKU5oNg15Wtt+TpEgKSkZrU3WsdxsNp4l5mIhPRo2NElNs7kixuH74gp5qjiKwne330B52coRfdmE42Getr8GUunsKWLuRZgWfHcyDFT8yzrKzoaEqvrgI9olGTvKrA+NPcpoN8I1k='
# 解密
with open("rsa.private.pem", mode="r") as f:
prikey = f.read()
rsa_pk =RSA.importKey(prikey)
rsa = PKCS1_v1_5.new(rsa_pk)
result = rsa.decrypt(base64.b64decode(data), None)
print("rsas解密数据:::", result.decode("utf-8"))