import json
import base64
from cryptography.hazmat.primitives import serialization, hashes
from cryptography.hazmat.primitives.asymmetric import padding
from cryptography.hazmat.backends import default_backend
def encrypt_card_data(card_data, public_key_pem):
# Load the public key
public_key = serialization.load_pem_public_key(
public_key_pem.encode(),
backend=default_backend()
)
# Convert card data to JSON string
json_string = json.dumps(card_data)
# Encrypt using RSA-OAEP with SHA-256
encrypted = public_key.encrypt(
json_string.encode(),
padding.OAEP(
mgf=padding.MGF1(algorithm=hashes.SHA256()),
algorithm=hashes.SHA256(),
label=None
)
)
# Return base64-encoded string
return base64.b64encode(encrypted).decode()
# Usage
public_key = """-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA...
-----END PUBLIC KEY-----"""
card_data = {
'card_number': '4111111111111111',
'expiry_month': '12',
'expiry_year': '2025',
'cvv': '123',
'cardholder_name': 'John Doe'
}
encrypted_data = encrypt_card_data(card_data, public_key)
print(encrypted_data)
# Output: "tbjH0nx6WaEkzHOjgw2crsusmVBuL8s+PxWF..."