Шифрование-Расшифровка несколько раз

75
5

Я пытаюсь использовать криптографию, используя Python2.7. Я могу зашифровать-расшифровать текст один раз. Но когда я пытаюсь шифровать-расшифровывать несколько раз, в цикле, он не возвращает исходную строку в переменной p. Пожалуйста, взгляните на мой код и предложите, что можно сделать. Спасибо!

import os, random
from Crypto.Cipher import AES
from Crypto.Hash import SHA256

'''Encryption'''

k = 'mykey'
hasher = SHA256.new(k)
k = hasher.digest()

p = 'enigmaticaura'
print p
IV = ''

lp = len(p)

for i in range(16):
IV += chr(random.randint(0,0xFF))

if len(p)%16 != 0:
p += ' '*(16 - len(p)%16)

enc = AES.new(k, AES.MODE_CBC, IV)
for i in range(2):
p = enc.encrypt(p)
print p

'''Decryption'''

dec = AES.new(k, AES.MODE_CBC, IV)
for i in range(2):
p = dec.decrypt(p)

#p = p[:lp]
print p

спросил(а) 2021-01-27T23:52:48+03:00 2 месяца, 2 недели назад
1
Решение
61

Отказ от ответственности сначала: Python - это не совсем моя сильная сторона, но эй, прошло некоторое время, так как я ответил на все так, почему бы и нет...

Думаю, ваш вопрос должен был быть чем-то вроде "почему дешифрование не создает исходный вход".

Во-первых, почему? Использование того же ключа на самом деле не сделает шифрование лучше.

А для двоих - это не значит работать так. Я почти уверен, что это связано с тем, что объекты шифрования и дешифрования имеют статус "состояние" и не могут быть повторно использованы. Это сообщение SO описывает это более подробно.

Но два небольших изменения сделают это (вроде) работой, так как вы вернете исходный исходный код.

for i in range(2):
enc = AES.new(k, AES.MODE_CBC, IV) ## move this line inside the loop
p = enc.encrypt(p)
print p

а также

for i in range(2):
dec = AES.new(k, AES.MODE_CBC, IV) ## and this line too
p = dec.decrypt(p)

который может или не может быть тем, на что вы надеялись.

ответил(а) 2021-01-27T23:52:48+03:00 2 месяца, 2 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема