Вопрос по python, openssl, aes, encryption – Почему шифрованный AES шифр одной и той же строки с одним и тем же ключом всегда отличается?

0

У меня есть файл с именем plain.txt. Внутри файла у меня есть:

Hello Hello Hello Hello

Я использую эту команду для шифрования:

openssl enc -aes-128-cbc -salt -k "Hello" -in plain.txt -out encrypted.bin

Затем я печатаю зашифрованное значение следующим образом:

buff = open("encrypted.bin")
cipher = buff.read()
buff.close()
print b64encode(cipher)

Но это всегда другая ценность. Разве шифр не должен быть всегда одинаковым? Я использую тот же файл и тот же пароль, чтобы зашифровать его. Это мои выходные выводы:

Richard-Knops-MacBook-Pro:python_test richardknop$ openssl enc -aes-128-cbc -salt -k "Hello" -in plain.txt -out encrypted.bin
Richard-Knops-MacBook-Pro:python_test richardknop$ python test.py U2FsdGVkX1+AmoQiIkYAxIYanLr/kbjMfEJPPLfeE/wtyxScvAKzb7K38ZxoI097
Richard-Knops-MacBook-Pro:python_test richardknop$ openssl enc -aes-128-cbc -salt -k "Hello" -in plain.txt -out encrypted.bin
Richard-Knops-MacBook-Pro:python_test richardknop$ python test.py U2FsdGVkX19vPD+OoiK7iSgYJiPMxuKGNWWrLlfBS0c3yCJkuv7QIBGEo2Q86UsV
Richard-Knops-MacBook-Pro:python_test richardknop$ openssl enc -aes-128-cbc -salt -k "Hello" -in plain.txt -out encrypted.bin
Richard-Knops-MacBook-Pro:python_test richardknop$ python test.py U2FsdGVkX1+3I8EC7u3lrcVPyD/JV12NAecWvTPXGga0Nh2cwqLAtGCDhLK6MI9g
Richard-Knops-MacBook-Pro:python_test richardknop$ 
По сути, зашифрованный текст всегда должен выглядеть как случайный вывод. Если это не так, это приводит к утечке информации. В этом случае вы можете увидеть, начинается ли шифрование с тем же паролем с идентичным значением, зашифрованным ранее. Представьте себе следующий разговор: вы вообще BadEncryption? Зашифрованный ответ: «да». Должны ли мы атаковать на рассвете? Зашифрованный ответ: «да». Таким образом, враг видит зашифрованные, но идентичные сообщения и начинает управлять гаубицами. Maarten Bodewes

Ваш Ответ

3   ответа
7

Потому что "соль" меняется каждый раз. Это предотвращает, например, атаки типа «Радужная таблица» на зашифрованные значения. Увидетьhttp://en.wikipedia.org/wiki/Salt_(cryptography)

Вы можете использовать -nosalt. Но это не рекомендуется.
Могу ли я зашифровать его без использования соли? Какой параметр? Richard Knop
0

Причиной получения другой зашифрованной строки является & quot; enc -aes-128-cbc ". CBC расшифровывается как Cipher Block Chaining. Таким образом, для 2-го блока зашифрованный вывод первого блока действует как переменная, поэтому каждый раз вы получаете различную строку. для получения более подробной информации google & quot; AES в режиме CBC & quot;

0

Вы получаете разные результаты при каждом запуске, потому что новая соль генерируется каждый раз, когда вы запускаете команду. Чтобы обеспечить одну и ту же соль для каждого последующего использования-S salt вариант, т.е.

openssl enc -aes-128-cbc -salt -S "Salt" -k "Hello" -in plain.txt -out encrypted.bin

Похожие вопросы