from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes
from Crypto.Util.Padding import pad
from Crypto.Util.Padding import unpad
import os
import random
import base64
def StartEncrypt():
# Ключ шифрования
str_key = str(random.randrange(1000000000000000, 9999999999999999))
key = str_key.encode("utf-8")
# Генерация случайного IV (Initialization Vector)
iv = get_random_bytes(16)
a = iv
print(len(a))
print(len(iv))
# Создание объекта шифра
cipher = AES.new(key, AES.MODE_CBC, iv)
# Данные для шифрования
str_data = str(input("data for encrypt : "))
data = str_data.encode("utf-8")
# Шифрование данных
ct_bytes = cipher.encrypt(pad(data, AES.block_size))
# Кодирование результата в формат base64 для удобства хранения
ct_base64 = base64.b64encode(ct_bytes).decode('utf-8')
print(f'Encrypted data: {ct_base64}')
# Вывод информации о результате шифрования
print(f'Key: {key}')
print(f'IV: {iv}')
def StartDeCrypt():
# Ключ шифрования
str_key = str(input("enter key :"))
key = str_key.encode("utf-8")
# IV, полученный при шифровании
str_iv = str(input("enter iv :"))
iv = str_iv.encode("utf-8")
print(len(iv))
# Декодирование данных из base64
str_cd = str(input("enter encrypted data :"))
ct_bytes = base64.b64decode(str_cd.encode("utf-8"))
# Создание объекта дешифратора
cipher = AES.new(key, AES.MODE_CBC, iv)
# Расшифровка данных
pt_bytes = cipher.decrypt(ct_bytes)
# Удаление лишних байтов, добавленных при padding
pt_bytes = unpad(pt_bytes, AES.block_size)
# Вывод расшифрованных данных
print(pt_bytes.decode('utf-8'))
StartEncrypt()
StartDeCrypt()
enter iv :
from Crypto.Random import get_random_bytes
import struct
def StartEncrypt():
# Генерация случайного IV (Initialization Vector)
iv = get_random_bytes(16)
print(len(iv))
print(iv)
# Вывод информации о результате шифрования
print(f'IV: {struct.unpack("b"*len(iv), iv)}')
def StartDeCrypt():
# IV, полученный при шифровании
data = input("enter iv :")
for item in ['(', ')']:
data = data.replace(item,'')
str_iv = tuple(map(int, data.split(',')))
print(str_iv)
iv = struct.pack('b'*len(str_iv), *str_iv)
print(iv)
print(len(iv))
StartEncrypt()
StartDeCrypt()
16
b'?\x06\x8f\xe9\xde!\xa0\xa8\x07\xfc\xb9\x1b\xb2X\x1e\x96'
IV: (63, 6, -113, -23, -34, 33, -96, -88, 7, -4, -71, 27, -78, 88, 30, -106)
enter iv :63, 6, -113, -23, -34, 33, -96, -88, 7, -4, -71, 27, -78, 88, 30, -106)
(63, 6, -113, -23, -34, 33, -96, -88, 7, -4, -71, 27, -78, 88, 30, -106)
b'?\x06\x8f\xe9\xde!\xa0\xa8\x07\xfc\xb9\x1b\xb2X\x1e\x96'
16