Может ли зашифрованная строка быть каждый раз разной при тех же данных и условиях?
Может ли зашифрованная строка быть каждый раз разной при тех же данных и условиях?
Например два раза зашифровать файл с тем же ключем, но в результате получить разные зашифрованные символы?
Да. Неплохо было бы указать как и чем вы шифруете.
Но в современных алгоритмах шифрования активно используется рандомная соль, чтобы получать разную зашифрованную строку.
Усложняет взлом зашифрованного текста по радужным таблицам.
p.s. А кроме соли может быть еще и вектор инициализации
Если вы пользуетесь каким-нить алгоритмом из openssl, который использует соль, он сам генерит рандомную соль каждый раз и просто добавляет ее открытым текстом к зашифрованному паролю.
И потом по нему и расшифровывает.
А что такое "вторым ключом" ?
duo456, использование соли нужно не для ломания расшифровываемости, а для того, чтобы данные нельзя было подобрать по готовым таблицам.
Как это работает на простейшем примере хеширования паролей: пусть у нас используется MD5, тогда MD5("123")=202cb962ac59075b964b07152d234b70, и если у нас из миллиона пользователей 10 имеют пароль 123, то в базе будет 10 хешей с таким значением, которые легко найдутся по радужным таблицам. Но если каждый пароль будет посолен, то хеши станут разными. Например, MD5("nk4Wu3XUbNvf123")=3f39c284a3b16263ebcc50ada7148d3e и уже потребуются радужные таблицы намного большего объёма. Причём даже знание хеша+соль не поможет упростить задачу подбора.
Конкретно к шифровке-расшифровке. Мы добавляем случайную соль в исходный текст по каким-то конкретным, чтобы было понятно, где она заканчивается и как её выкинуть в итоге. Например, "соль:текст" или json'чиком {"text":"текст","salt":"соль"}. Если соль каждый раз будет случайной, то в результате расшифровки мы получаем текст с солью, которую можно выкинуть (она не имеет смысла, просто добавляется для увеличения энтропии шифротекста) и получить исходный текст. Но шифротекст при этом кардинально меняется.
Это может быть особенно ценно в протоколах, в которых передаются данные, принципиально допускающие повторения. Например, если передаются показания датчиков, то они ж могут повторяться.