feat:项目完成
This commit is contained in:
45
func/decryption.py
Normal file
45
func/decryption.py
Normal file
@@ -0,0 +1,45 @@
|
||||
import Crypto, base64
|
||||
from Crypto.Cipher import PKCS1_v1_5
|
||||
from Crypto.PublicKey import RSA
|
||||
from Crypto.Cipher import DES
|
||||
|
||||
|
||||
# rsa解密密文方法
|
||||
def get_max_length(rsa_key, encrypt=True):
|
||||
"""加密内容过长时 需要分段加密 换算每一段的长度.
|
||||
:param rsa_key: 钥匙.
|
||||
:param encrypt: 是否是加密.
|
||||
"""
|
||||
blocksize = Crypto.Util.number.size(rsa_key.n) / 8
|
||||
reserve_size = 11 # 预留位为11
|
||||
if not encrypt: # 解密时不需要考虑预留位
|
||||
reserve_size = 0
|
||||
maxlength = blocksize - reserve_size
|
||||
return maxlength
|
||||
# ------------------------解密密文------------------------
|
||||
def decryption(text_encrypted_base64: str, private_key: bytes):
|
||||
# 字符串指定编码(转为bytes)
|
||||
text_encrypted_base64 = text_encrypted_base64.encode('utf-8')
|
||||
# base64解码
|
||||
text_encrypted = base64.b64decode(text_encrypted_base64)
|
||||
# 构建私钥对象
|
||||
private_key = RSA.importKey(private_key)
|
||||
max_length = int(get_max_length(private_key, False))
|
||||
cipher_private = PKCS1_v1_5.new(private_key)
|
||||
length = len(text_encrypted)
|
||||
if length < max_length:
|
||||
return b''.join(cipher_private.decrypt(text_encrypted, b'xyz'))
|
||||
# 需要分段
|
||||
offset = 0
|
||||
res = []
|
||||
while length - offset > 0:
|
||||
if length - offset > max_length:
|
||||
res.append(cipher_private.decrypt(text_encrypted[offset:offset + max_length], b'xyz'))
|
||||
else:
|
||||
res.append(cipher_private.decrypt(text_encrypted[offset:], b'xyz'))
|
||||
offset += max_length
|
||||
text_decrypted = b''
|
||||
for i in res:
|
||||
text_decrypted += i
|
||||
# print(text_decrypted.decode())
|
||||
return text_decrypted.decode()
|
Reference in New Issue
Block a user