非对称加密(RSA)简介

非对称加密(RSA)是一种加密方式,与对称加密不同,它使用一对密钥:公钥和私钥。公钥用于加密数据,私钥用于解密数据。

RSA 非对称加密参数:

  • 公钥:用于加密数据的公开密钥。
  • 私钥:用于解密数据的私有密钥。

RSA 非对称加密作用:

  • 加密:使用接收者的公钥对数据进行加密,确保只有拥有私钥的接收者能够解密数据。
  • 签名:使用发送者的私钥对数据进行签名,接收者可以使用发送者的公钥验证签名的真实性。

RSA 非对称加密数据类型:

  • 明文(Plaintext):待加密或签名的原始数据。
  • 密文(Ciphertext):经过公钥加密后的数据。
  • 签名(Signature):使用私钥生成的签名数据。

RSA 非对称加密安全性:

  • RSA 算法基于大素数的数论问题,目前被认为是一种安全可靠的加密算法。
  • 通信双方之间通过交换公钥实现安全通信,确保数据的机密性和完整性。

RSA 非对称加密应用:

  • 在数字签名、安全通信、身份验证等领域广泛应用。

HTTPS 协议中的 SSL/TLS 加密就是建立在非对称加密算法(如 RSA)的基础上。 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 = ''

# 解密
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"))
我的笔记