Skip to content

Commit a788d8f

Browse files
authored
perf: 优化超长文本rsa加密解密 (#312)
1 parent c4c4934 commit a788d8f

File tree

1 file changed

+24
-38
lines changed

1 file changed

+24
-38
lines changed

apps/common/util/rsa_util.py

Lines changed: 24 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -62,18 +62,6 @@ def get_key_pair_by_sql():
6262
return system_setting.meta
6363

6464

65-
# def get_key_pair():
66-
# if not os.path.exists("/opt/maxkb/conf/receiver.pem"):
67-
# kv = generate()
68-
# private_file_out = open("/opt/maxkb/conf/private.pem", "wb")
69-
# private_file_out.write(kv.get('value'))
70-
# private_file_out.close()
71-
# receiver_file_out = open("/opt/maxkb/conf/receiver.pem", "wb")
72-
# receiver_file_out.write(kv.get('key'))
73-
# receiver_file_out.close()
74-
# return {'key': open("/opt/maxkb/conf/receiver.pem").read(), 'value': open("/opt/maxkb/conf/private.pem").read()}
75-
76-
7765
def encrypt(msg, public_key: str | None = None):
7866
"""
7967
加密
@@ -111,28 +99,27 @@ def rsa_long_encrypt(message, public_key: str | None = None, length=200):
11199
:param length: 1024bit的证书用100, 2048bit的证书用 200
112100
:return: 加密后的数据
113101
"""
114-
115102
# 读取公钥
116103
if public_key is None:
117104
public_key = get_key_pair().get('key')
118-
cipher = PKCS1_cipher.new(RSA.importKey(extern_key=public_key,
119-
passphrase=secret_code))
120-
# 处理:Plaintext is too long. 分段加密
121-
if len(message) <= length:
122-
# 对编码的数据进行加密,并通过base64进行编码
123-
result = base64.b64encode(cipher.encrypt(message.encode('utf-8')))
124-
else:
125-
rsa_text = []
126-
# 对编码后的数据进行切片,原因:加密长度不能过长
127-
for i in range(0, len(message), length):
128-
cont = message[i:i + length]
129-
# 对切片后的数据进行加密,并新增到text后面
130-
rsa_text.append(cipher.encrypt(cont.encode('utf-8')))
131-
# 加密完进行拼接
132-
cipher_text = b''.join(rsa_text)
133-
# base64进行编码
134-
result = base64.b64encode(cipher_text)
135-
return result.decode()
105+
cipher = PKCS1_cipher.new(RSA.importKey(extern_key=public_key,
106+
passphrase=secret_code))
107+
# 处理:Plaintext is too long. 分段加密
108+
if len(message) <= length:
109+
# 对编码的数据进行加密,并通过base64进行编码
110+
result = base64.b64encode(cipher.encrypt(message.encode('utf-8')))
111+
else:
112+
rsa_text = []
113+
# 对编码后的数据进行切片,原因:加密长度不能过长
114+
for i in range(0, len(message), length):
115+
cont = message[i:i + length]
116+
# 对切片后的数据进行加密,并新增到text后面
117+
rsa_text.append(cipher.encrypt(cont.encode('utf-8')))
118+
# 加密完进行拼接
119+
cipher_text = b''.join(rsa_text)
120+
# base64进行编码
121+
result = base64.b64encode(cipher_text)
122+
return result.decode()
136123

137124

138125
def rsa_long_decrypt(message, pri_key: str | None = None, length=256):
@@ -143,12 +130,11 @@ def rsa_long_decrypt(message, pri_key: str | None = None, length=256):
143130
:param length : 1024bit的证书用128,2048bit证书用256位
144131
:return: 解密后的数据
145132
"""
146-
147133
if pri_key is None:
148134
pri_key = get_key_pair().get('value')
149-
cipher = PKCS1_cipher.new(RSA.importKey(pri_key, passphrase=secret_code))
150-
base64_de = base64.b64decode(message)
151-
res = []
152-
for i in range(0, len(base64_de), length):
153-
res.append(cipher.decrypt(base64_de[i:i + length], 0))
154-
return b"".join(res).decode()
135+
cipher = PKCS1_cipher.new(RSA.importKey(pri_key, passphrase=secret_code))
136+
base64_de = base64.b64decode(message)
137+
res = []
138+
for i in range(0, len(base64_de), length):
139+
res.append(cipher.decrypt(base64_de[i:i + length], 0))
140+
return b"".join(res).decode()

0 commit comments

Comments
 (0)