PHP: Предупреждение mcrypt_generic_init (): неверный размер Iv; поставляемая длина: 12, необходимо: 8
Основные факты:
$algorithm = MCRYPT_BLOWFISH;
$mode = MCRYPT_MODE_CBC;
$randSource = MCRYPT_DEV_URANDOM;
Заметка Это не строгий вопрос кодирования.
Контекст:
CentOS 7, Apache 2.4.12 и PHP 5.6.20.
Я делаю электронное письмо в формате HTML со ссылкой «подтвердить свой адрес электронной почты», которая позволяет завершить процесс регистрации. Все на моем виртуальном частном сервере - UTF-8, и все вводы формы и строки запроса обрабатываются с помощью многобайтовых (mb) функций.
Фон
Как эксперимент (Я знаю о возрасте и состоянии библиотеки Mcrypt), Я пытаюсь расшифровать параметры строки запроса Blowfish. Предположим, что на пути вверх последовательность шифрования работает отлично, и я получаю электронное письмо со ссылкой.
На пути внизhmac_hash()
Подписание (SHA-512, только для этого эксперимента) работает, и я могу отделить каждое независимое сообщение (32 символа) от его контрольной суммы хеша (128 символов). Декодирование Base64 отдельной части сообщения работает. Для каждого параметра у меня остаетсясоставной шифрованный текстгде составной зашифрованный текст равенIV + базовый зашифрованный текст, Предположим, я используюверсия изsubstr()
получить IV и базовый зашифрованный текст независимо (что является нормой для курса).
проблема
PHP: Warning mcrypt_generic_init(): Iv size is incorrect; supplied length: 12, needed: 8
Предположим, я прочесал руководство по PHP и Stackoverflow. Предположим, я смотрел на другие вопросы, похожие, но не совсем такие, как этот. Предположим, я искал в интернете безрезультатно. Предположим, у меня достаточно опыта для настройкиmb_string
должным образом. Предположим, что я позабочусь о заполнении mcrypt, когда преодолею эту проблему.
Могут ли многобайтовые проблемы мешать расшифровке?
Может ли base64 кодироватьIV + base cipher text
развратить IV?
Может ли base64 padding быть проблемой?
Должен ли я указать более конкретныйMCRYPT_BLOWFISH_*
?
Почему размер Blowfish IV сообщает 8 байтов, но редко дает 8 байтов IV?
Какой substr () я должен использовать,substr()
или жеmb_substr()
для установки, которая склоняется к созданию всего UTF-8 и обрабатывает все другие входные данные как многобайтовый UTF-8. Я знаю, что это странный вопрос, но все примеры последовательности расшифровки mycrypt в PHP Manual используютзиЬзЬг ()и никто не используетmb_substr()
, Все на моем сайте работает с mb_functions, когда это возможно, и я не против использоватьsubstr()
если это решило мою проблему, но не решило ее. Когда я используюmb_substr()
Я получаю следующее предупреждение.
PHP: Warning mcrypt_generic_init(): Iv size is incorrect; supplied length: 11, needed: 8
У кого-нибудь есть опыт работы с этой конкретной проблемой? Конструктивные ответы будут вознаграждены!
Самый последний
Выше приведен пример хэша Blowfish, который я пытаюсь восстановить из массива, полученного через SHA512 HMACed, симметрично зашифрованный Blowfish (CBC), URL-адрес, безопасный в кодировке Base64, в кодировке urlenco, строку запроса (phew!).
Ниже показано, как выглядят строки для строки запроса (разделив хэш blowfish выше) после шифрования, подписи и кодирования base64, но до того, как их кодируют в формате urlencoded. Каждый из них имеет длину 128 символов (каждая строка становится длиннее, когда вы делаете больше вещей).
Выше представлен декодированный Base64 и расшифрованный массив Blowfish, полученный из строки запроса (очевидно, между этими результатами есть шаги по обеспечению безопасности, но я просто пытаюсь показать последнее состояние вещей). Что-то не так. Шифрование работает без ошибок. Расшифровка также не приводит к ошибкам. Простой текст просто неверен. Если я присоединяюсь / взрываю эти элементы, они не будут похожи на хэш Blowfish выше.