PHP mcrypt_decrypt – могу ли я определить, расшифровывается ли информация с помощью правой клавиши?

Я работаю над php-скриптом и использую mcrypt для шифрования / дешифрования произвольных данных.

Когда я дешифрую зашифрованные данные, используя другой ключ (например, я набрал неправильный пароль), вывод не будет правильно дешифрован, конечно.

Если неправильный ключ был использован, я хотел бы отобразить сообщение об ошибке, но я думаю, что довольно сложно проверить выходную строку как правильный «открытый текст» (поскольку символы в закодированных данных также действительны в качестве входных данных).

Есть ли способ обойти это?


Когда я писал этот вопрос, у меня появилась идея 🙂

Могу ли я, возможно, префикс входных данных статической «контрольной» строкой и использовать это для проверки при расшифровке?

Related of "PHP mcrypt_decrypt – могу ли я определить, расшифровывается ли информация с помощью правой клавиши?"

Обычно я это делаю:

  • Хешируйте входные данные (файл или сообщение или что-то еще).
  • Шифровать данные.
  • Подготовьте зашифрованные данные с помощью IV и хеша данных.
  • Отправляйте или храните гипертекст IV + +.

Поскольку IV и хэш всегда имеют одинаковую длину, нет необходимости добавлять дополняющие или управляющие символы.

На стороне приема или чтения:

  • Извлеките IV.
  • Извлеките хэш.
  • Извлечение и расшифровка зашифрованного текста.
  • Хешируйте дешифрованные данные и проверьте, соответствует ли он извлеченному хешу.

Таким образом, вы храните хэш исходных данных, а не хэш ключа . Как отмечал комментатор, раздача хэша вашего ключа является уязвимостью, поскольку злоумышленнику теперь нужно только искать его в таблице радуги (это может скомпрометировать ваши данные за считанные секунды).

Идея хранения контрольной строки тоже хороша (конечно, быстрее), но она не может позволить вам подтвердить сообщение, или данные действительно неповреждены, только если был использован правильный ключ.

Лучший способ добавить целостность к зашифрованным данным – добавить MAC, созданный ТОЛЬКО на зашифрованные данные.

Не применяйте MAC-адрес в обычном тексте, потому что MAC может отображать некоторую информацию об этом тексте. MAC не создан для обеспечения целостности целостности.

Итак, правильный алгоритм будет ENCRYPT-THEN-MAC!

Более подробная информация доступна в этом видео http://d396qusza40orc.cloudfront.net/crypto/recoded_videos%2F7.4%20%5B974a4c90%5D%20.mp4