| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- import base64
- import json
- import logging
- from cryptography.hazmat.primitives.serialization import load_pem_private_key
- from cryptography.hazmat.primitives.asymmetric import padding as asym_padding
- from Crypto.Cipher import AES
- from Crypto.Util.Padding import unpad
- logger = logging.getLogger(__name__)
- RSA_PRIVATE_KEY_B64 = (
- "MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEAqhHyZfSsYourNxaY7Nt+"
- "PrgrxkiA50efORdI5U5lsW79MmFnusUA355oaSXcLhu5xxB38SMSyP2KvuKNPuH3owID"
- "AQABAkAfoiLyL+Z4lf4Myxk6xUDgLaWGximj20CUf+5BKKnlrK+Ed8gAkM0HqoTt2UZw"
- "A5E2MzS4EI2gjfQhz5X28uqxAiEA3wNFxfrCZlSZHb0gn2zDpWowcSxQAgiCstxGUoOq"
- "lW8CIQDDOerGKH5OmCJ4Z21v+F25WaHYPxCFMvwxpcw99EcvDQIgIdhDTIqD2jfYjPTY"
- "8Jj3EDGPbH2HHuffvflECt3Ek60CIQCFRlCkHpi7hthhYhovyloRYsM+IS9h/0BzlEAu"
- "O0ktMQIgSPT3aFAgJYwKpqRYKlLDVcflZFCKY7u3UP8iWi1Qw0Y="
- )
- _private_key = None
- def _get_private_key():
- global _private_key
- if _private_key is None:
- pem = f"-----BEGIN PRIVATE KEY-----\n{RSA_PRIVATE_KEY_B64}\n-----END PRIVATE KEY-----"
- _private_key = load_pem_private_key(pem.encode(), password=None)
- return _private_key
- def decrypt_rsa(encrypted_b64: str) -> bytes:
- pk = _get_private_key()
- encrypted = base64.b64decode(encrypted_b64)
- return pk.decrypt(encrypted, asym_padding.PKCS1v15())
- def decrypt_aes_ecb(encrypted_b64: str, key: bytes) -> str:
- encrypted = base64.b64decode(encrypted_b64)
- cipher = AES.new(key, AES.MODE_ECB)
- decrypted = unpad(cipher.decrypt(encrypted), AES.block_size)
- return decrypted.decode("utf-8")
- def try_decrypt_request(encrypt_key_header: str, body: str) -> dict:
- aes_key_b64 = decrypt_rsa(encrypt_key_header)
- aes_key = base64.b64decode(aes_key_b64)
- decrypted_json = decrypt_aes_ecb(body, aes_key)
- return json.loads(decrypted_json)
|