You can download this code by clicking the button below.
This code is now available for download.
This code defines several encryption-related functions, including generating RSA key pairs, encrypting and decrypting messages, hashing passwords, and verifying passwords.
Technology Stack : cryptography, PBKDF2HMAC, Scrypt, serialization, rsa, padding, hashes, OAEP, MGF1
Code Type : The type of code
Code Difficulty :
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.kdf.pbkdf2 import PBKDF2HMAC
from cryptography.hazmat.primitives.kdf.scrypt import Scrypt
from cryptography.hazmat.primitives import serialization
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives.asymmetric import rsa
from cryptography.hazmat.primitives.asymmetric import padding
from os import urandom
def generate_rsa_keypair(bit_length=2048):
private_key = rsa.generate_private_key(
public_exponent=65537,
key_size=bit_length,
backend=default_backend()
)
public_key = private_key.public_key()
return private_key, public_key
def encrypt_message(public_key, message):
encrypted = public_key.encrypt(
message,
padding.OAEP(
mgf=padding.MGF1(algorithm=hashes.SHA256()),
algorithm=hashes.SHA256(),
label=None
)
)
return encrypted
def decrypt_message(private_key, encrypted_message):
decrypted = private_key.decrypt(
encrypted_message,
padding.OAEP(
mgf=padding.MGF1(algorithm=hashes.SHA256()),
algorithm=hashes.SHA256(),
label=None
)
)
return decrypted
def hash_password(password, salt=None):
if salt is None:
salt = urandom(16)
kdf = Scrypt(
salt=salt,
length=32,
n=2**14,
r=8,
p=1,
backend=default_backend()
)
key = kdf.derive(password.encode())
return key, salt
def verify_password(stored_password, provided_password, salt):
stored_key, _ = hash_password(stored_password, salt)
provided_key, _ = hash_password(provided_password, salt)
return stored_key == provided_key