FzHUEL/func/decryption.py
2024-05-23 11:12:39 +08:00

46 lines
1.7 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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()