На выходных я играл с php mcrypt, а AES использовал для шифрования текстовых строк ключом.
Позже я разработал крошечный PHP-инструмент для шифрования / дешифрования ваших строк с помощью AES / mcrypt, теперь, когда ключ «неправильный» и текст не расшифровывается, вы получаете то, что я считаю двоичным из того, что я прочитал вокруг (http://i.imgur.com/jF8cZMZ.png), в любом случае, есть ли в PHP проверка, содержит ли переменная двоичную или правильно декодированную строку?
Мои извинения, если название и вступление немного вводят в заблуждение.
Когда вы шифруете текст, а затем пытаетесь расшифровать его, вы получите тот же текст, но при попытке расшифровать случайные данные есть небольшая вероятность того, что результатом будет текст (уменьшающийся с увеличением длины данных). Вы не указали, о каких данных мы говорим, но определить, успешно ли расшифровано с помощью эвристики, — плохая идея. Это медленно и может привести к ложным срабатываниям.
У вас должна быть контрольная сумма или что-то подобное, чтобы определить, является ли расшифрованный результат действительным. Это можно легко сделать, запустив sha1
на незашифрованных данных добавьте результат к тексту и зашифруйте его целиком. Когда вы расшифровываете, вы можете разделить (sha1
вывод имеет фиксированный размер, так что вы знаете, где разделить) результирующая строка запуска sha1
на текстовой части и сравнить с хеш-частью. Если это соответствует, у вас есть действительный результат. Конечно, вы можете немного улучшить безопасность, используя SHA-256 или SHA-512.
Это только один из способов сделать это, но, возможно, не самый лучший. Лучше было бы использовать аутентифицированный режим работы для AES, например, GCM или CCM, или использовать шифровать-то-MAC с хорошей функцией MAC, такой как HMAC-SHA512.
Используя вышеописанные подходы, вы можете свободно использовать любые виды данных для шифрования, поскольку вы не ограничены определением, является ли это текстом или нет.
Других решений пока нет …