chatgpt/async-rsa-encryption.py

52 lines
1.4 KiB
Python

#!/usr/bin/python3
import json
import base64
import asyncio
from cryptography.fernet import Fernet
from cryptography.hazmat.primitives.asymmetric import rsa
# Generate a new RSA key pair
private_key = rsa.generate_private_key()
public_key = private_key.public_key()
# Asynchronously encrypt and decrypt a JSON document
async def encrypt_decrypt_json(json_data: dict) -> dict:
# Convert the JSON data to a string
json_str = json.dumps(json_data)
# Encode the JSON string as bytes
json_bytes = json_str.encode()
# Encrypt the JSON bytes using Fernet
fernet = Fernet(base64.urlsafe_b64encode(public_key.public_bytes(
encoding=rsa.Encoding.DER,
format=rsa.PublicFormat.SubjectPublicKeyInfo
)))
encrypted_json_bytes = fernet.encrypt(json_bytes)
# Decrypt the encrypted JSON bytes using Fernet
decrypted_json_bytes = fernet.decrypt(encrypted_json_bytes)
# Decode the decrypted JSON bytes back to a string
decrypted_json_str = decrypted_json_bytes.decode()
# Convert the decrypted JSON string back to a dictionary
decrypted_json_data = json.loads(decrypted_json_str)
return decrypted_json_data
# Example usage
json_data = {
"user": "johnsmith",
"password": "correcthorsebatterystaple"
}
# Asynchronously encrypt and decrypt the JSON data
decrypted_json_data = asyncio.run(encrypt_decrypt_json(json_data))
# Print the decrypted JSON