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 выше.

Ответы на вопрос(1)

Ваш ответ на вопрос