【加密算法基础——RSA 加密】

RSA 加密

RSA(Rivest-Shamir-Adleman)加密是非对称加密,一种广泛使用的公钥加密算法,主要用于安全数据传输。公钥用于加密,私钥用于解密。
RSA 加密算法的名称来源于其三位发明者的姓氏:

  • R: Ron Rivest
  • S: Adi Shamir
  • A: Leonard Adleman
    这三位计算机科学家在 1977 年共同提出了这一算法,并发表了相关论文。他们的工作为公钥加密的基础奠定了重要基础,使得安全通信得以在不需要共享密钥的情况下进行。RSA 算法至今仍然是最广泛使用的公钥加密算法之一。

基本概念

  • 公钥加密: RSA 使用一对密钥:公钥(公开)和私钥(保密)。公钥用于加密,私钥用于解密。
  • 安全性: RSA 的安全性基于大数分解的难度,即从一个大整数中分解出其素因数是计算上困难的。

注意事项

  • RSA 加密通常用于加密小数据量(如对称密钥),不宜直接加密大量数据。
  • 为提高安全性,通常与其他加密算法(如 AES)结合使用。
    所以有时候用RSA加密,AES加密算法中的key或者初始向量是比较合适的。

代码示例

from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_v1_5
import base64

# 生成RSA密钥对
key = RSA.generate(2048)  # 2048位密钥

# 获取RSA公钥和私钥
public_key = key.publickey().export_key()
private_key = key.export_key()

# 打印公钥和私钥
print("RSA公钥:")
print(public_key.decode())
print("\nRSA私钥:")
print(private_key.decode())

# 加密数据
data = b'I love you'
cipher_rsa = PKCS1_v1_5.new(key.publickey())
encrypted_data = cipher_rsa.encrypt(data)

# 将加密后的数据转换为Base64格式方便传输
encrypted_data_base64 = base64.b64encode(encrypted_data).decode()

print("\n加密后的数据(Base64编码):")
print(encrypted_data_base64)

# 解密数据
cipher_rsa = PKCS1_v1_5.new(key)
decrypted_data = cipher_rsa.decrypt(encrypted_data, None)

print("\n解密后的数据:")
print(decrypted_data.decode())

运行结果展示:

RSA公钥:
-----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvaWwqYY8ag69+f9Yucnp
esK98wvfj8eKuVTCrg0Z7NpFeuggulf4mg2djTtIM2ENhmRBoaopJuXfdR8AEFp+
iNsCCJ/ffZZ8hAk65DkYOhW/tO60PHndCvU5vVQ/2nwjFTgQJFODyZdQIZDFZIkm
q7co/G+FZ9DRj+5tmMw0cEMQZaSdicpdmezOcafxrwCTgpCnr6ePmFLzN6ZW/xBb
DPO2FvBxonRooUp7uWXiAGuVI7uEMIzacovNrcI4HP0ZI1EXWQFBAFRNhOoSAKVS
nmt9RiC+0GsEHGAayi7ueBVybJFj4YOHaY9wFK/ElXBcZ8By/Li916QJgNWqttVJ
ZQIDAQAB
-----END PUBLIC KEY-----

RSA私钥:
-----BEGIN RSA PRIVATE KEY----- MIIEogIBAAKCAQEAvaWwqYY8ag69+f9YucnpesK98wvfj8eKuVTCrg0Z7NpFeugg
ulf4mg2djTtIM2ENhmRBoaopJuXfdR8AEFp+iNsCCJ/ffZZ8hAk65DkYOhW/tO60
PHndCvU5vVQ/2nwjFTgQJFODyZdQIZDFZIkmq7co/G+FZ9DRj+5tmMw0cEMQZaSd
icpdmezOcafxrwCTgpCnr6ePmFLzN6ZW/xBbDPO2FvBxonRooUp7uWXiAGuVI7uE
MIzacovNrcI4HP0ZI1EXWQFBAFRNhOoSAKVSnmt9RiC+0GsEHGAayi7ueBVybJFj
4YOHaY9wFK/ElXBcZ8By/Li916QJgNWqttVJZQIDAQABAoIBAAE6X/AG7ObTtFNM
6iPjjq/reQxYGPcdAYSVsN4kd7ft6/bTzZNnEsryvbOZpjAcIF7bg7wsDyqecyhB
SfOmfaoLUC5yasQi49N5HVHV8ZqnYdP1iqGSGLqa+9PNkoxfhEBCdKMIeGTkPLoQ
oRb4k7f22yE4y30fTDhpmxfmKScFWLayuj5V0SySW+0JK5YwT/5fB0CNADar/SRg
JF5SYFVKZ/sFEJvIXnbz4PqQkdIw7X6//pxd4Q0Jk269rYK3SLo4+2vX5Uhucifs
PEbjYz0CPeDOOlC3UsVPVTB+5ejGHext0PxuoxrlEEbrMZsi6GJmgmsl0ihWvjsy
k9idTscCgYEAyEvYsYznWSFOXrC9wKIofZgeLsoFmHicM/b3j6r5dz+goC9a5iZc
bLMdQOiFQzBNxJPJ/24117yCpFUPcSLZhDdH2hQYOxw/zevNIFR9V4rQUTMidOI0
y6fo67u+1k+j2ew3oABBqibnJD4G7VKylRxDo5BW0uGMVz5KKpjeHc8CgYEA8mOu
ci0jbfeHYXQ8QSZgC5ByBQWYdxWYXK9jaHMb/HaIjtPiY/fxw3jTUO0BHa+ozXBZ
6TJS+fY1nRyuUQ8xxKVflD3Pfa54Bh1BV/yDYv4bePuqj7hlfzGBYcPnWroYxDHH
kX0Mp+qXow5bgDCWfjKuBrssAH7YLfNxp4JDxosCgYALU46ra6ZheequnBv+2qyj
fYinaLEsUBW1MpAJRcfZoHV62XKwdRbg5rgOxZdTl1WuehUAJsFQs85HcK/w2+Gl
AmNDx8MfBJfvExiEbYKxAp6JGPUn2urVYWdgfTtrbxF670qt95W/A3gqqn9FyFlk
6TZB95WRU0PWYyVah054LQKBgEEXEZ5pjq0WHo3GB/Q62OniFSxSD1pTO0IQezJu
TuKh9hPcxFuyFoM2bBC8RGNza3IXrJ1ZvTyQqF8Td6Ae4296NUt6ucB3XJXPv19g
WOv5bukzM986Vk8svSDC2drcRJBTCdOA8CgbcDMCRQIMii1DcMYv9yX+6hCU4j1o
Vsj3AoGAbBMvPAQTBVnz5qwvTcdgkwoM2ALB/eBsjGaeBgNqDkerVTs2cY/AEJIO
+56+cAyk54w6KkbkcmGsha1Qg7NfnrohgjXPBFRh2f5SsBcrdDxYdLiLVpc/Y+B7 kHg+/hcDWtDKrbsCOJt4fV7lKRwIpdK9p6aYVWFsSvd2jgcF8dA=
-----END RSA PRIVATE KEY-----

加密后的数据(Base64编码):
DILYiMaDETLpbtyGfFrWhSeFuBBiMaQd2FtDDjWhQrquTHSoBPKGGaqe+B+NhwD5k2UaMP3BAvMIkZyM2h3APhjKJhmn8rnjcxMqVsU2xaLTbkMQbnPLP4Oaw0j2f3jIN/6zSefLMOUdBivU/aciOR3TmaTPvkMsD1v4/6DzPT6ysntSYaS/5x3bB1S9h0zi95jZMjjTlPnobvuQh1xESPy7dGfQ1sqr3rutGBQscgcbmCMxBPhJNtWejhdZRjz0gSiBEOBZWaNM1PrkVCcZ/MFk1bqr3b1pkKoerIK1fmZ7phI34cDIhwjyMD5m+vXbkrpLb5/511nWAjRcJ3aFVQ==

解密后的数据: I love you

你可能感兴趣的:(网络,服务器,笔记,python)