from cryptography.hazmat.primitives import hashes, serialization
from cryptography.hazmat.primitives.asymmetric import padding
from cryptography.hazmat.backends import default_backend
import base64
# Your plaintext
plaintext = "20260225054200Aa123456"
# HKEX Public Key
public_key_pem = """-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAt68LZ9gaZGKsJJ0ipbtk
KHKarXSwElY2hZikQTa+9YZ6LlOQFA+HLkk/s9CpZsMBenibvENl7Qg8/turgKr7
vwfPDf6cIp05cApxwSFsEQhlEGulAuG6fo3IdtWS65w9eHWKIjYaSLxkn0OPxcKu
86OWo8rGutq3gtB6f1tjNF31D8TpYvYB+H1fJgCz2fckTg4oocFr8iWtti+ZpnZD
zafJ8qblT3Dy9gHptabRj2d9FZR9BfPeziYo/aLqSmo0psVvA1PkG0H6MEuWZfN2
dHQRmka3i/CeCrGr/j/gaULBZg7TOsJdMzG6e7AP/MnfSFrgkIUSoDkKUvGNA616
QwIDAQAB
-----END PUBLIC KEY-----"""
# Load the public key
public_key = serialization.load_pem_public_key(
public_key_pem.encode(),
backend=default_backend()
)
# Encrypt using RSA with OAEP padding
encrypted = public_key.encrypt(
plaintext.encode('utf-8'),
padding.OAEP(
mgf=padding.MGF1(algorithm=hashes.SHA256()), # MGF1 with SHA-256
algorithm=hashes.SHA256(), # OAEP hash algorithm
label=None # Optional label (usually None)
)
)
# Convert to Base64
result = base64.b64encode(encrypted).decode('ascii')
print("Input:", plaintext)
print("OAEP Result:", result)
print("Length:", len(result), "characters")
ZnJvbSBjcnlwdG9ncmFwaHkuaGF6bWF0LnByaW1pdGl2ZXMgaW1wb3J0IGhhc2hlcywgc2VyaWFsaXphdGlvbgpmcm9tIGNyeXB0b2dyYXBoeS5oYXptYXQucHJpbWl0aXZlcy5hc3ltbWV0cmljIGltcG9ydCBwYWRkaW5nCmZyb20gY3J5cHRvZ3JhcGh5Lmhhem1hdC5iYWNrZW5kcyBpbXBvcnQgZGVmYXVsdF9iYWNrZW5kCmltcG9ydCBiYXNlNjQKIAojIFlvdXIgcGxhaW50ZXh0CnBsYWludGV4dCA9ICIyMDI2MDIyNTA1NDIwMEFhMTIzNDU2IgogCiMgSEtFWCBQdWJsaWMgS2V5CnB1YmxpY19rZXlfcGVtID0gIiIiLS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUlJQklqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUF0NjhMWjlnYVpHS3NKSjBpcGJ0awpLSEthclhTd0VsWTJoWmlrUVRhKzlZWjZMbE9RRkErSExray9zOUNwWnNNQmVuaWJ2RU5sN1FnOC90dXJnS3I3CnZ3ZlBEZjZjSXAwNWNBcHh3U0ZzRVFobEVHdWxBdUc2Zm8zSWR0V1M2NXc5ZUhXS0lqWWFTTHhrbjBPUHhjS3UKODZPV284ckd1dHEzZ3RCNmYxdGpORjMxRDhUcFl2WUIrSDFmSmdDejJmY2tUZzRvb2NGcjhpV3R0aStacG5aRAp6YWZKOHFibFQzRHk5Z0hwdGFiUmoyZDlGWlI5QmZQZXppWW8vYUxxU21vMHBzVnZBMVBrRzBINk1FdVdaZk4yCmRIUVJta2EzaS9DZUNyR3Ivai9nYVVMQlpnN1RPc0pkTXpHNmU3QVAvTW5mU0ZyZ2tJVVNvRGtLVXZHTkE2MTYKUXdJREFRQUIKLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tIiIiCiAKIyBMb2FkIHRoZSBwdWJsaWMga2V5CnB1YmxpY19rZXkgPSBzZXJpYWxpemF0aW9uLmxvYWRfcGVtX3B1YmxpY19rZXkoCiAgICBwdWJsaWNfa2V5X3BlbS5lbmNvZGUoKSwKICAgIGJhY2tlbmQ9ZGVmYXVsdF9iYWNrZW5kKCkKKQogCiMgRW5jcnlwdCB1c2luZyBSU0Egd2l0aCBPQUVQIHBhZGRpbmcKZW5jcnlwdGVkID0gcHVibGljX2tleS5lbmNyeXB0KAogICAgcGxhaW50ZXh0LmVuY29kZSgndXRmLTgnKSwKICAgIHBhZGRpbmcuT0FFUCgKICAgICAgICBtZ2Y9cGFkZGluZy5NR0YxKGFsZ29yaXRobT1oYXNoZXMuU0hBMjU2KCkpLCAgIyBNR0YxIHdpdGggU0hBLTI1NgogICAgICAgIGFsZ29yaXRobT1oYXNoZXMuU0hBMjU2KCksICAgICAgICAgICAgICAgICAgICAgIyBPQUVQIGhhc2ggYWxnb3JpdGhtCiAgICAgICAgbGFiZWw9Tm9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIE9wdGlvbmFsIGxhYmVsICh1c3VhbGx5IE5vbmUpCiAgICApCikKIAojIENvbnZlcnQgdG8gQmFzZTY0CnJlc3VsdCA9IGJhc2U2NC5iNjRlbmNvZGUoZW5jcnlwdGVkKS5kZWNvZGUoJ2FzY2lpJykKIApwcmludCgiSW5wdXQ6IiwgcGxhaW50ZXh0KQpwcmludCgiT0FFUCBSZXN1bHQ6IiwgcmVzdWx0KQpwcmludCgiTGVuZ3RoOiIsIGxlbihyZXN1bHQpLCAiY2hhcmFjdGVycyIp