diff --git a/IS/Lab/Lab2/des_vs_aes256.py b/IS/Lab/Lab2/des_vs_aes256.py index e69de29..a5e45c7 100644 --- a/IS/Lab/Lab2/des_vs_aes256.py +++ b/IS/Lab/Lab2/des_vs_aes256.py @@ -0,0 +1,87 @@ +from Crypto.Cipher import DES, AES +from Crypto.Util.Padding import pad, unpad +import time +from bokeh.plotting import figure, show +from bokeh.models import ColumnDataSource +from bokeh.io import output_file + + +def benchmark_encryption_decryption(cipher_func, data, key): + # Measure encryption time + start_time = time.time() + encrypted = cipher_func(data, key) + encrypt_time = time.time() - start_time + + # Measure decryption time + start_time = time.time() + decrypted = cipher_func(encrypted, key, decrypt=True) + decrypt_time = time.time() - start_time + + return encrypt_time, decrypt_time + + +def des_cipher(data, key, decrypt=False): + cipher = DES.new(key.encode('utf-8'), DES.MODE_ECB) + if decrypt: + return unpad(cipher.decrypt(data), DES.block_size).decode('utf-8') + else: + padded_data = pad(data.encode('utf-8'), DES.block_size) + return cipher.encrypt(padded_data) + + +def aes_cipher(data, key, decrypt=False): + cipher = AES.new(key.encode('utf-8'), AES.MODE_ECB) + if decrypt: + return unpad(cipher.decrypt(data), AES.block_size).decode('utf-8') + else: + padded_data = pad(data.encode('utf-8'), AES.block_size) + return cipher.encrypt(padded_data) + + +def main(): + message = "Performance Testing of Encryption Algorithms" + + # Test with different key sizes + des_key = "12345678" # 8 bytes for DES + aes_key = "12345678901234567890123456789012" # 32 bytes for AES-256 + + # Benchmark DES + des_encrypt_time, des_decrypt_time = benchmark_encryption_decryption(des_cipher, message, des_key) + + # Benchmark AES-256 + aes_encrypt_time, aes_decrypt_time = benchmark_encryption_decryption(aes_cipher, message, aes_key) + + # Print results + print("Performance Results:") + print("-" * 40) + print(f"DES Encryption: {des_encrypt_time:.9f} seconds") + print(f"DES Decryption: {des_decrypt_time:.9f} seconds") + print(f"AES-256 Encryption: {aes_encrypt_time:.9f} seconds") + print(f"AES-256 Decryption: {aes_decrypt_time:.9f} seconds") + + # Create Bokeh visualization + algorithms = ['DES', 'AES-256'] + encrypt_times = [des_encrypt_time, aes_encrypt_time] + decrypt_times = [des_decrypt_time, aes_decrypt_time] + + # Create the plot + p = figure(x_range=algorithms, height=400, title="Encryption/Decryption Performance Comparison", + toolbar_location=None, responsive=True) + + p.vbar(x='algorithm', top='encrypt_time', width=0.4, color='blue', alpha=0.7, legend_label="Encryption", + source=ColumnDataSource(data=dict(algorithm=algorithms, encrypt_time=encrypt_times))) + p.vbar(x='algorithm', top='decrypt_time', width=0.4, color='red', alpha=0.7, legend_label="Decryption", + source=ColumnDataSource(data=dict(algorithm=algorithms, decrypt_time=decrypt_times))) + + p.legend.location = "top_right" + p.xaxis.axis_label = "Algorithm" + p.yaxis.axis_label = "Time (seconds)" + p.title.text_font_size = "14px" + + # Save and show the plot + output_file("encryption_performance.html") + show(p) + + +if __name__ == '__main__': + main() \ No newline at end of file