from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives.asymmetric import rsa
from cryptography.hazmat.primitives import serialization
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.asymmetric import padding
import base64
# 1. Tạo cặp khóa RSA
private_key = rsa.generate_private_key(
public_exponent=65537,
key_size=2048,
backend=default_backend()
)
public_key = private_key.public_key()
# 2. Mã hóa tin nhắn
message = b"i love you" # Chuyển tin nhắn thành bytes
ciphertext = public_key.encrypt(
message,
padding.OAEP(
mgf=padding.MGF1(algorithm=hashes.SHA256()),
algorithm=hashes.SHA256(),
label=None
)
)
# Chuyển ciphertext thành chuỗi base64 để dễ dàng lưu trữ và truyền tải
ciphertext_base64 = base64.b64encode(ciphertext).decode('utf-8')
print("Ciphertext (base64):", ciphertext_base64)
# 3. Giải mã tin nhắn
ciphertext_bytes = base64.b64decode(ciphertext_base64) # Chuyển ciphertext base64 về bytes
plaintext = private_key.decrypt(
ciphertext_bytes,
padding.OAEP(
mgf=padding.MGF1(algorithm=hashes.SHA256()),
algorithm=hashes.SHA256(),
label=None
)
)
print("Plaintext:", plaintext.decode('utf-8')) # Chuyển plaintext bytes về string
ZnJvbSBjcnlwdG9ncmFwaHkuaGF6bWF0LmJhY2tlbmRzIGltcG9ydCBkZWZhdWx0X2JhY2tlbmQKZnJvbSBjcnlwdG9ncmFwaHkuaGF6bWF0LnByaW1pdGl2ZXMuYXN5bW1ldHJpYyBpbXBvcnQgcnNhCmZyb20gY3J5cHRvZ3JhcGh5Lmhhem1hdC5wcmltaXRpdmVzIGltcG9ydCBzZXJpYWxpemF0aW9uCmZyb20gY3J5cHRvZ3JhcGh5Lmhhem1hdC5wcmltaXRpdmVzIGltcG9ydCBoYXNoZXMKZnJvbSBjcnlwdG9ncmFwaHkuaGF6bWF0LnByaW1pdGl2ZXMuYXN5bW1ldHJpYyBpbXBvcnQgcGFkZGluZwppbXBvcnQgYmFzZTY0CgojIDEuIFThuqFvIGPhurdwIGtow7NhIFJTQQpwcml2YXRlX2tleSA9IHJzYS5nZW5lcmF0ZV9wcml2YXRlX2tleSgKICAgIHB1YmxpY19leHBvbmVudD02NTUzNywKICAgIGtleV9zaXplPTIwNDgsCiAgICBiYWNrZW5kPWRlZmF1bHRfYmFja2VuZCgpCikKCnB1YmxpY19rZXkgPSBwcml2YXRlX2tleS5wdWJsaWNfa2V5KCkKCiMgMi4gTcOjIGjDs2EgdGluIG5o4bqvbgptZXNzYWdlID0gYiJpIGxvdmUgeW91IiAgIyBDaHV54buDbiB0aW4gbmjhuq9uIHRow6BuaCBieXRlcwpjaXBoZXJ0ZXh0ID0gcHVibGljX2tleS5lbmNyeXB0KAogICAgbWVzc2FnZSwKICAgIHBhZGRpbmcuT0FFUCgKICAgICAgICBtZ2Y9cGFkZGluZy5NR0YxKGFsZ29yaXRobT1oYXNoZXMuU0hBMjU2KCkpLAogICAgICAgIGFsZ29yaXRobT1oYXNoZXMuU0hBMjU2KCksCiAgICAgICAgbGFiZWw9Tm9uZQogICAgKQopCgojIENodXnhu4NuIGNpcGhlcnRleHQgdGjDoG5oIGNodeG7l2kgYmFzZTY0IMSR4buDIGThu4UgZMOgbmcgbMawdSB0cuG7ryB2w6AgdHJ1eeG7gW4gdOG6o2kKY2lwaGVydGV4dF9iYXNlNjQgPSBiYXNlNjQuYjY0ZW5jb2RlKGNpcGhlcnRleHQpLmRlY29kZSgndXRmLTgnKQpwcmludCgiQ2lwaGVydGV4dCAoYmFzZTY0KToiLCBjaXBoZXJ0ZXh0X2Jhc2U2NCkKCiMgMy4gR2nhuqNpIG3DoyB0aW4gbmjhuq9uCmNpcGhlcnRleHRfYnl0ZXMgPSBiYXNlNjQuYjY0ZGVjb2RlKGNpcGhlcnRleHRfYmFzZTY0KSAjIENodXnhu4NuIGNpcGhlcnRleHQgYmFzZTY0IHbhu4EgYnl0ZXMKcGxhaW50ZXh0ID0gcHJpdmF0ZV9rZXkuZGVjcnlwdCgKICAgIGNpcGhlcnRleHRfYnl0ZXMsCiAgICBwYWRkaW5nLk9BRVAoCiAgICAgICAgbWdmPXBhZGRpbmcuTUdGMShhbGdvcml0aG09aGFzaGVzLlNIQTI1NigpKSwKICAgICAgICBhbGdvcml0aG09aGFzaGVzLlNIQTI1NigpLAogICAgICAgIGxhYmVsPU5vbmUKICAgICkKKQoKcHJpbnQoIlBsYWludGV4dDoiLCBwbGFpbnRleHQuZGVjb2RlKCd1dGYtOCcpKSAjIENodXnhu4NuIHBsYWludGV4dCBieXRlcyB24buBIHN0cmluZw==