浅谈非对称加密(RSA)

时间:2024-04-18 11:30:42

浅谈非对称加密(RSA)

非对称加密(如 RSA)是一种加密方式,与对称加密不同,它使用一对密钥:公钥和私钥。公钥用于加密数据,而私钥用于解密数据。以下是关于 RSA 非对称加密的一些信息:

RSA 非对称加密的特点:

  1. 参数

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

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

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

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

    • 在数字签名、安全通信、身份验证等领域广泛应用。
    • 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"))

以上示例均可在[小蜜蜂AI][https://zglg.work]获取更多说明。