AES ENCRYPTION & DECRYPTION - PE
from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import padding
import os
def pad(data):
padder = padding.PKCS7(128).padder()
return padder.update(data) + padder.finalize()
def unpad(data):
unpadder = padding.PKCS7(128).unpadder()
return unpadder.update(data) + unpadder.finalize()
def aes_encrypt(plaintext, key):
iv = os.urandom(16) # Random Initialization Vector
cipher = Cipher(algorithms.AES(key), modes.CBC(iv), backend=default_backend())
encryptor = cipher.encryptor()
padded_data = pad(plaintext.encode())
ciphertext = encryptor.update(padded_data) + encryptor.finalize()
return iv + ciphertext # Return IV + encrypted data
def aes_decrypt(ciphertext, key):
iv = ciphertext[:16]
actual_ciphertext = ciphertext[16:]
cipher = Cipher(algorithms.AES(key), modes.CBC(iv), backend=default_backend())
decryptor = cipher.decryptor()
decrypted_padded = decryptor.update(actual_ciphertext) + decryptor.finalize()
return unpad(decrypted_padded).decode()
def main():
plaintext = input("Enter the plaintext: ")
user_key = input("Enter the 16-character (128-bit) key: ")
if len(user_key) != 16:
print("Key must be 16 characters long!")
return
key = user_key.encode() # Convert to bytes
encrypted = aes_encrypt(plaintext, key)
print("\nEncrypted (hex):", encrypted.hex())
decrypted = aes_decrypt(encrypted, key)
print("Decrypted text:", decrypted)
if name == "main":
main()
#input:HELLO AES!
#KEY:#thisisa128bitkey