added lab2 questions
This commit is contained in:
parent
a1b2495e47
commit
376f2ccf5e
1 changed files with 87 additions and 0 deletions
|
@ -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()
|
Loading…
Add table
Add a link
Reference in a new issue