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")
ZnJvbSBjcnlwdG9ncmFwaHkuaGF6bWF0LnByaW1pdGl2ZXMgaW1wb3J0IGhhc2hlcywgc2VyaWFsaXphdGlvbgpmcm9tIGNyeXB0b2dyYXBoeS5oYXptYXQucHJpbWl0aXZlcy5hc3ltbWV0cmljIGltcG9ydCBwYWRkaW5nCmZyb20gY3J5cHRvZ3JhcGh5Lmhhem1hdC5iYWNrZW5kcyBpbXBvcnQgZGVmYXVsdF9iYWNrZW5kCmltcG9ydCBiYXNlNjQKCiMgWW91ciBwbGFpbnRleHQKcGxhaW50ZXh0ID0gIjIwMjYwMjI1MDU0MjAwQWExMjM0NTYiCgojIEhLRVggUHVibGljIEtleQpwdWJsaWNfa2V5X3BlbSA9ICIiIi0tLS0tQkVHSU4gUFVCTElDIEtFWS0tLS0tCk1JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBdDY4TFo5Z2FaR0tzSkowaXBidGsKS0hLYXJYU3dFbFkyaFppa1FUYSs5WVo2TGxPUUZBK0hMa2svczlDcFpzTUJlbmlidkVObDdRZzgvdHVyZ0tyNwp2d2ZQRGY2Y0lwMDVjQXB4d1NGc0VRaGxFR3VsQXVHNmZvM0lkdFdTNjV3OWVIV0tJallhU0x4a24wT1B4Y0t1Cjg2T1dvOHJHdXRxM2d0QjZmMXRqTkYzMUQ4VHBZdllCK0gxZkpnQ3oyZmNrVGc0b29jRnI4aVd0dGkrWnBuWkQKemFmSjhxYmxUM0R5OWdIcHRhYlJqMmQ5RlpSOUJmUGV6aVlvL2FMcVNtbzBwc1Z2QTFQa0cwSDZNRXVXWmZOMgpkSFFSbWthM2kvQ2VDckdyL2ovZ2FVTEJaZzdUT3NKZE16RzZlN0FQL01uZlNGcmdrSVVTb0RrS1V2R05BNjE2ClF3SURBUUFCCi0tLS0tRU5EIFBVQkxJQyBLRVktLS0tLSIiIgoKIyBMb2FkIHRoZSBwdWJsaWMga2V5CnB1YmxpY19rZXkgPSBzZXJpYWxpemF0aW9uLmxvYWRfcGVtX3B1YmxpY19rZXkoCiAgICBwdWJsaWNfa2V5X3BlbS5lbmNvZGUoKSwKICAgIGJhY2tlbmQ9ZGVmYXVsdF9iYWNrZW5kKCkKKQoKIyBFbmNyeXB0IHVzaW5nIFJTQSB3aXRoIE9BRVAgcGFkZGluZwplbmNyeXB0ZWQgPSBwdWJsaWNfa2V5LmVuY3J5cHQoCiAgICBwbGFpbnRleHQuZW5jb2RlKCd1dGYtOCcpLAogICAgcGFkZGluZy5PQUVQKAogICAgICAgIG1nZj1wYWRkaW5nLk1HRjEoYWxnb3JpdGhtPWhhc2hlcy5TSEEyNTYoKSksICAjIE1HRjEgd2l0aCBTSEEtMjU2CiAgICAgICAgYWxnb3JpdGhtPWhhc2hlcy5TSEEyNTYoKSwgICAgICAgICAgICAgICAgICAgICAjIE9BRVAgaGFzaCBhbGdvcml0aG0KICAgICAgICBsYWJlbD1Ob25lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgT3B0aW9uYWwgbGFiZWwgKHVzdWFsbHkgTm9uZSkKICAgICkKKQoKIyBDb252ZXJ0IHRvIEJhc2U2NApyZXN1bHQgPSBiYXNlNjQuYjY0ZW5jb2RlKGVuY3J5cHRlZCkuZGVjb2RlKCdhc2NpaScpCgpwcmludCgiSW5wdXQ6IiwgcGxhaW50ZXh0KQpwcmludCgiT0FFUCBSZXN1bHQ6IiwgcmVzdWx0KQpwcmludCgiTGVuZ3RoOiIsIGxlbihyZXN1bHQpLCAiY2hhcmFjdGVycyIp