Python常见函数之RSA算法加密

Python常见函数之RSA加密

来自维基百科:RSA加密算法是一种非对称加密算法,在公开密钥加密和电子商业中被广泛使用。RSA是由罗纳德·李维斯特、阿迪·萨莫尔和伦纳德·阿德曼在1977年一起提出的。当时他们三人都在麻省理工学院工作。RSA 就是他们三人姓氏开头字母拼在一起组成的。

代码实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
import base64
from Crypto.Cipher import PKCS1_v1_5 as Cipher_pkcs1_v1_5
from Crypto.Signature import PKCS1_v1_5
from Crypto.PublicKey import RSA
from Crypto.Hash import SHA
import json
import Crypto
import secrets


def rsa_long_encrypt(pub_key_str, msg):
msg = msg.encode('utf-8')
length = len(msg)
default_length = 117
#公钥加密
pubobj = Cipher_pkcs1_v1_5.new(RSA.importKey(pub_key_str))
#长度不用分段
if length < default_length:
return base64.b64encode(pubobj.encrypt(msg))
#需要分段
offset = 0
res = []
while length - offset > 0:
if length - offset > default_length:
res.append(pubobj.encrypt(msg[offset:offset+default_length]))
else:
res.append(pubobj.encrypt(msg[offset:]))
offset += default_length
byte_data = b''.join(res)
print(base64.b64encode(byte_data))
return base64.b64encode(byte_data)

publickey = 'your publick key'
public_key = '-----BEGIN PUBLIC KEY-----\n'+ publickey +'\n-----END PUBLIC KEY-----'

data = {
"payAmount": 1000000,
"payChId": 1,
"bankAssetId": 1001
}

first = secrets.token_bytes(16)
result = base64.b64encode(first).decode()
print(result)
#password = 'password='+result
password='password=WBAPfpP5ph2MrWSOkznJGA=='
print(password)
infor = json.dumps(data)
print(infor)
infor=rsa_long_encrypt(public_key,password)
print(infor)
print(infor.decode('utf-8'))


Python常见函数之RSA算法加密
https://dreamshao.github.io/2024/06/27/RSA加密/
作者
Yun Shao
发布于
2024年6月27日
许可协议