Skip to content

Instantly share code, notes, and snippets.

@akmamun
Last active April 11, 2023 06:45
Show Gist options
  • Save akmamun/1487270197bac2b6602ccbb57b930898 to your computer and use it in GitHub Desktop.
Save akmamun/1487270197bac2b6602ccbb57b930898 to your computer and use it in GitHub Desktop.
Public/Privet key encryption decryption with python
import base64
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import hashes, serialization
from cryptography.hazmat.primitives.asymmetric import rsa, padding
KEY_SIZE = 2048
PASSWORD = b'1234546' # bytes of string
PRIVET_KEY_ENCODE = b'LS0tLS1CRUdJTiBFTkNSWVBURUQgUFJJVkFURSBLRVktLS0tLQpNSUlGSFRCWEJna3Foa2lHOXcw\nQkJRMHdTakFwQmdrcWhraUc5dzBCQlF3d0hBUUl4VEhpRWl6RUZ1VUNBZ2dBCk1Bd0dDQ3FHU0li\nM0RRSUpCUUF3SFFZSllJWklBV1VEQkFFcUJCREhWREs0NHp1enRDOVZGNlRoZ0pIMkJJSUUKd05E\nckR0MWpRaVBPWEFMaHhLVFJIRW9nVE9OS25tN1R0MVJ2b2hvc2FqWEdKYTByUUJxRXJFZlFBUjA4\naHJRdwp1anJFM3g1aUw3eGNRQmV2eWczMnYyWHBBYXBoczZKRjJoNklibUxabE0rU29mMmpMbVJv\ndzNOZ0x4ODg4c3ZRCm94V25WZXpGMCtZY0VIWHZKd3NvbkRmOFEvRHA3b08vdi9ndm1MMkpqcVl5\nZVh0LzlEanMyRVpRQzVQbTJIekcKR0dLSVBaRk9lWDdCWkcybFp0Q2RPWDZEcmJXdk9STjkwbmxF\nc1ZsOVVhOWlPVVk1OTNreFYwS3M0QUhUekJOQwpjcFhUaHp6R1dOckp4R08wMjV2TnZUcTNqQUZ0\ndXdyMXowV2NpNmZsdktHQUxIVkxya2JadEhYU2kzK1lLSWlkCkJqUXcyRkh2OURkY25hZ1NCSFYz\nZnhPNm14S1Jad0JXcGVpRDlzSEVjQnZvZnJJOUNKUFJ6RGVGRndNVUJKZG4KaTQzSUZ6dnFtaHpx\nNjgzRzhVTFY0VURWSFloMUpiS3l5UnRCeFhzQ2h0bGN2bEs5bWZiWk9KUzQweTdsaDZQOQpHTWJv\nQnNXc2c4MEJlSndjZDQ0Zi9ER1M2b2lzcjdXeTJHTHlOT2ZLeVgxSEpGMU96dy8xeGtaNmY1T1VF\neHlMCnVVeEZHbm1oWW82cGZlemxEZG5QOENIeC9HMzd1RkpHZk5BY0NSUHZSMnhna0QwNGZxeFJK\nVXkrSElGTXZkSXIKakhmV3JNZ095ZHVqZngwWS84enBTQXN0RW5iemt1Um1FVWhWQnVibVh6LzFt\nZk9oY1h0enVqTitUaWxEcjVXSQpmY3NXT2d2K1U2eTdzMS9tdWZXd2JTbW9JVDQ4eFM4bmo3b3lQ\nRWtxU0orWXJmNzQvTC9aY3paVC82dVFtdTJxClZDRldkcmdEdGlMV0RaMFZJb0VFNzM4OVlqa05B\nZ2toRis2TzhndmpuY3RqdzUxdk8vVmVDV2M5dHZHVXhyZFUKQ2oyTFJkVzhEY1FpTFBIMTIxdDZP\nUGsveU9ubUFuRkI2TlVYd2RMY0dZbUlVR3RFZkx2Q2Fjbm9TRENGQXBuVwpsTFpFSE8yR0h1Mkpo\nUGdxZVRwektjY2p4ZFJscExSWTU1Uit0STJNUUJnVk1YUi9mUnI0bjlqSXpFYlZOd3VMClVQbU5C\nMjVkTk9sT1NuVkRYb09wK3lFSlFXOGVJNk5nMTF4V3V0R3M0ckdUYWdvNzB0cm5KNWoxQ3FjczEr\nWlkKUU16dkkyVk5JeFBMMEJNelF6WnB0NnF5cXNVOUV3aHZxV2VyVFJlQVBtYk9oVVEwajhkbWF1\nM2FHV1JMb3psbgovZStsUXFVc0oyUnlNZm00K2VJVkQyYkFvS09TdCtuaE1sR0hhTlBVaHZsQ2NI\nV1gwZFlqUmlFbW9BeGkzeHlNCkt4M29ZMU9Wc1B1TEhFSUxFbHpCLzhKTzNUWUloK0VRVVhYMHlx\nQnlMYVFaby90cWlSKzF6SGRueVhQY0laRFoKYjVqL1ZRekFTVUZUSk5VY2Z1MzA2OUFxSVdCVWxz\nR1VFMExvUVd6NEpFSlZIU0trank3OUQxOHVpaHpPUTlOawpYZnJ0YUpickNYZnBIZ3Fnb1BWVXpO\nZlcremtMdm5xd0ErM1o1ZjZJUGsrZzJUbDhqa3M4TXNWUTZ4VitUVm15CjJldDVFc0FlT1ZuVXVU\nV05ZUkVoK2UwT2tYdm9QM3NUZ210R0drYXdiV0Z6MnhCMnF3bDFHVEEyL1p0NTZ5STIKZmhRVVVW\nTXZ6dmtjVU1MeTVFZDNld3Njd3N1bVhOclNSV2d5dGpIRUVDMDJEREdTOFg5b2YvSndkOUhkQlNU\nMQo3UmgxaTZIYnZPNm5PQzRzbjBnWm5LczJjRTZPUlpPR2dyQ3lsSUl3SkpYMjZzbDAwdEZZRUE4\nZ3owcndHSy9iCnlBMWloSzV0NHZKUnJhK1p0TmhEdWIrZVNIWlU0eUhPN1pmdnhhUkxvYXdWaU1q\ncVZQR0JWSVBDb3dsNkxqQWoKc2l3VE1PZDl4RkxKRUlLNjNwUXF5aE9XdmdDSG9kQ05GZjQrQlU4\nOFRzSUg0Nm5mTzFnVko0NzZKUkUzYjIvcwpRYTlCNjFZSExMZ1lVWHAwSE1YZTNyRT0KLS0tLS1F\nTkQgRU5DUllQVEVEIFBSSVZBVEUgS0VZLS0tLS0K\n'
PUBLIC_KEY_ENCODE = b'LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUlJQklqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FR\nOEFNSUlCQ2dLQ0FRRUF1ZzBnQjRiQ0FPb2txSS80eDEwTgptN1JQc0NjSGp1MmI3MHlJOEU4S3Ja\nWjcvWjBrMVB3UUt3eEx0WnkyNXhZRWw4RERML09SL2lPMVhJdldQUDRkCkJWZEtSZHNoR0xkNU9p\nTlc5M2VIN2NDWnRhaEg2OHljZ1FYOW9sclNCeVZOekloRzNKa01TR3FHRDFRK056enIKS2pPVGIy\nUnFyM0Z3TklNYkVDNGNwOS9VcHZ2UW42a1NsQUtmMncyd2prY0E2Z0wzWHVicUhkcVBDcmZjcG4x\nKwpmT1RJdWZZY3ZkQ1hZVlhkeExRU1locnZYU1c4RjFuVWxFbzJKaHE3VGx0b0dweFRLb1dRUm9W\nR1l1NDdyS2szClEzdlljYldZVisvNys4M3MyYk1aaXhpWGJhSlcrVVpJRlo2YmV4ZEEwRHpHS2V4\nSjBUcHdETkM0QTcwWlJuRnkKWVFJREFRQUIKLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==\n'
key = rsa.generate_private_key(
backend=default_backend(),
public_exponent=65537,
key_size=2048
)
private_pem = key.private_bytes(
encoding=serialization.Encoding.PEM,
format=serialization.PrivateFormat.PKCS8,
encryption_algorithm=serialization.NoEncryption()
)
public_key = key.public_key()
privet_pem = public_key.public_bytes(
encoding=serialization.Encoding.PEM,
format=serialization.PublicFormat.SubjectPublicKeyInfo
)
message = "data"
public_key = serialization.load_pem_public_key(
base64.decodebytes(PUBLIC_KEY_ENCODE),
backend=default_backend()
)
privet_key = serialization.load_pem_private_key(
base64.decodebytes(PRIVET_KEY_ENCODE),
password=PASSWORD,
backend=default_backend()
)
ciphertext = public_key.encrypt(message.encode(), padding.OAEP(
mgf=padding.MGF1(algorithm=hashes.SHA256()),
algorithm=hashes.SHA256(),
label=None
))
plaintext = privet_key.decrypt(
ciphertext,
padding.OAEP(
mgf=padding.MGF1(algorithm=hashes.SHA256()),
algorithm=hashes.SHA256(),
label=None
)
).decode()
print(plaintext)
@akmamun
Copy link
Author

akmamun commented Apr 11, 2023

from cryptography.hazmat.primitives.asymmetric import padding
from cryptography.hazmat.primitives import serialization, hashes
from cryptography.hazmat.backends import default_backend
import base64

PUB_KEY = """-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwb8A5LILl5D5q3g5dt25
8Sv2QO9uA7gKgxxt/4od4V4e5CY5i3q/y3HAs8CvS5QXgRvgYZ7jBy4W8Y4b4FpP
jTN6wtsW6UfVnUiaj9+mDl1ykQdWz8ZP0n0sJwb+1w2kfw8fhv/xEiX9fgmEPzjq
Enfj/V0mTyyf/OFg0FXtTRpHtOrhBGkOgFtO3Nl3lEiNjKc2B7q3xPX5k2ySdDAs
0V7m0AWjR/eVZC4m0H48O6wNUbFdALpIAYc0PP6Uf2aKjN9zrsZlNtwZ37z8Qc1s
sUVwpVyABjLkWIFtzTbBZo9PpTjTzbTf1YPP+R0fRgDvX9Wz8aSJ2EMegdENuowK
ywIDAQAB
-----END PUBLIC KEY-----
"""

public_key = serialization.load_pem_public_key(
    PUB_KEY.encode(), backend=default_backend())

# Define the data to be encrypted
data = b"Hello, world!"

# Encrypt the data using the public key
encrypted_data = public_key.encrypt(
    data, padding.OAEP(mgf=padding.MGF1(algorithm=hashes.SHA256()),
                      algorithm=hashes.SHA256(),
                      label=None))

# Print the encrypted data in base64 format
print(base64.b64encode(encrypted_data))

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment