PRACTICAL NO: 4.2
                                     AES
CBC
CODE:
from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes
import base64
def pad(data):
    pad_len=16-(len(data)%16)
    return data+chr(pad_len) * pad_len
def unpad(data):
    pad_len=ord(data[-1])
    return data[:-pad_len]
def encrypt_aes(palin_text,key):
    iv=get_random_bytes(16)
    cipher=AES.new(key,AES.MODE_CBC,iv)
    padded_text=pad(palin_text)
    encrypted=cipher.encrypt(padded_text.encode('utf-8'))
    return base64.b64encode(iv+encrypted).decode('utf-8')
def decrypt_aes(cipher_text,key):
    raw=base64.b64decode(cipher_text)
    iv=raw[:16]
    encrypted=raw[16:]
    cipher=AES.new(key,AES.MODE_CBC,iv)
    decrypted=cipher.decrypt(encrypted).decode('utf-8')
    return unpad(decrypted)
if __name__=="__main__":
    key=get_random_bytes(16)
    print("AES key (base64):",base64.b64encode(key).decode("utf-8"))
    msg="Hello,AES encryption!"
    print("Original msg:",msg)
    encrypted=encrypt_aes(msg,key)
    print("Encrypted (Base64):",encrypted)
    decrypted=decrypt_aes(encrypted,key)
    print("Decrypted (Base64):",decrypted)
OUTPUT:
ECB
CODE:
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad,unpad
key=b'SixteenByteKey12'
data=b'Secure Database Payload Data'
cipher_encrypt=AES.new(key,AES.MODE_ECB)
padded_data=pad(data,AES.block_size)
ciphertext=cipher_encrypt.encrypt(padded_data)
cipher_decrypt=AES.new(key,AES.MODE_ECB)
decrypted_padded=cipher_decrypt.decrypt(ciphertext)
original_data=unpad(decrypted_padded,AES.block_size)
print(f"Ciphertext (Hex) : {ciphertext.hex()}")
print(f"Decrypted Data: {original_data.decode()}")
OUTPUT:
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad
from Crypto.Random import get_random_bytes
# 16-byte AES key (AES-128)
key = b"1234567890abcdef"
# Generate a random IV
iv = get_random_bytes(16)
# ---------- Encryption ----------
input_file = "C:/Users/Admin/Downloads/simple.txt"
encrypted_file = "encrypted.bin"
with open(input_file, "rb") as f:
    plaintext = f.read()
cipher = AES.new(key, AES.MODE_CBC, iv)
ciphertext = cipher.encrypt(pad(plaintext, AES.block_size))
with open(encrypted_file, "wb") as f:
    # Store IV followed by ciphertext
    f.write(iv)
    f.write(ciphertext)
print("File encrypted successfully as:", encrypted_file)
# ---------- Decryption ----------
decrypted_file = "decrypted_file"  
with open(encrypted_file, "rb") as f:
    iv = f.read(16)          # Read IV
    ciphertext = f.read()    # Read ciphertext
cipher = AES.new(key, AES.MODE_CBC, iv)
decrypted_data = unpad(cipher.decrypt(ciphertext), AES.block_size)
with open(decrypted_file, "wb") as f:
    f.write(decrypted_data)
print("File decrypted successfully as:", decrypted_file)
Output:-
