Что такое код mcrypt_enc_get_iv_size

Что такое код mcrypt_enc_get_iv_size

(PHP 4 >= 4.0.2, PHP 5)

mcrypt_get_iv_size — Returns the size of the IV belonging to a specific cipher/mode combination

Description int mcrypt_get_iv_size ( string cipher, string mode )

mcrypt_get_iv_size() returns the size of the Initialisation Vector (IV) in bytes. On error the function returns FALSE . If the IV is ignored in the specified cipher/mode combination zero is returned.

cipher is one of the MCRYPT_ciphername constants of the name of the algorithm as string.

mode is one of the MCRYPT_MODE_modename constants or one of «ecb», «cbc», «cfb», «ofb», «nofb» or «stream». The IV is ignored in ECB mode as this mode does not require it. You will need to have the same IV (think: starting point) both at encryption and decryption stages, otherwise your encryption will fail.

Пример 1. mcrypt_get_iv_size() example

echo mcrypt_get_iv_size ( MCRYPT_CAST_256 , MCRYPT_MODE_CFB ) . «\n» ;

echo mcrypt_get_iv_size ( ‘des’ , ‘ecb’ ) . «\n» ;
?>

Пред. Начало След.
mcrypt_get_cipher_name Уровень выше mcrypt_get_key_size

Если Вы не нашли что искали, то рекомендую воспользоваться поиском по сайту:

шифрование — PHP: Предупреждение mcrypt_generic_init (): неверный размер Iv; поставляемая длина: 12, необходимо: 8

Заметка
Это не строгий вопрос кодирования.

Контекст:

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 и 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() Я получаю следующее предупреждение.

Кто-нибудь имеет какой-либо опыт с этой конкретной проблемой? Конструктивные ответы будут вознаграждены!

Самый последний

Выше приведен пример хэша Blowfish, который я пытаюсь восстановить из массива, полученного через SHA512 HMACed, симметрично зашифрованный Blowfish (CBC), URL-адрес, безопасный в кодировке Base64, в кодировке urlenco, строку запроса (phew!).

Ниже показано, как выглядят строки для строки запроса (разделив хэш blowfish выше) после шифрования, подписи и кодирования base64, но до того, как их кодируют в формате urlencoded. Каждый из них имеет длину 128 символов (каждая строка становится длиннее, когда вы делаете больше вещей).

Выше приведен расшифрованный Base64 и расшифрованный массив Blowfish, полученный из строки запроса (очевидно, между этими результатами есть шаги по обеспечению безопасности, но я просто пытаюсь показать последнее состояние.) Что-то не так. Шифрование работает без ошибок. Расшифровка также не приводит к ошибкам. Простой текст просто неверен. Если я присоединяюсь / взрываю эти элементы, они не будут похожи на хэш Blowfish выше.

Решение

Я предполагаю, что проблема будет скрыта где-то с кодировкой UTF-8, поскольку вы используете ее в неправильных контекстах. Также может быть, что ваш фреймворк использует магию для всех вариантов использования. Это может быть слишком много и, как правило, заканчивается дырой в безопасности или просто такими ошибками, поскольку вы не делаете то, что действительно нужно сделать, когда это действительно необходимо сделать.

Строки в PHP — это просто наборы байтов. Вы можете хранить там текст в выбранной вами кодировке или просто хранить там двоичные данные, например изображения. PHP не знает ни того, какие данные находятся в какой строке, ни какая кодировка там используется. Это зависит от разработчика, чтобы отслеживать эту информацию.

При работе с шифрованием вы получаете двоичные данные при генерации случайных строк или шифровании некоторых полезных данных. Он сохраняется в виде строк, но не имеет кодировки UTF-8, так как это всего лишь байты. Я бы даже не сказал, что это кодировка ISO-8859-1, так как это означало бы, что байт 77 (0x4D) обозначает букву «М». Но на самом деле, это просто цифры — 77 не означает ни одной буквы.

Еще одна вещь, которую нужно добавить — для символов ASCII (латинские буквы, цифры и т. Д. — значения 0-127 байт) требуется один байт для представления этого символа в кодировке UTF-8 (так же, как в ISO-8859). Так, насколько вы проходите base64_encode D данные, вы не должны беспокоиться об этом. mb_substr также будет работать так же, как substr , Но! для двоичных данных вы не можете использовать mb_* функции, как это работает с персонажами. Например, если зашифрованные данные составляют два байта 0xC5 0xA1 Это единственный символ в UTF-8. Шифрование работает с байтами (вплоть до конечного результата, который может быть чем угодно — даже двоичными файлами), а не с символами.

Поскольку вы не предоставили какой-либо код, я поставил его для вас — я надеюсь, что он поможет с вашей проблемой (если она все еще актуальна).

FPublisher

Web-технологии: База знаний

Документация PHP

mcrypt_enc_get_supported_key_sizes

(PHP 4 >= 4.0.2, PHP 5)

mcrypt_enc_get_supported_key_sizes — Returns an array with the supported keysizes of the opened algorithm

Описание

array mcrypt_enc_get_supported_key_sizes ( resource $td )

Returns an array with the key sizes supported by the algorithm specified by the encryption descriptor. If it returns an empty array then all key sizes between 1 and mcrypt_enc_get_key_size() are supported by the algorithm.

Примеры

Пример #1 mcrypt_enc_get_supported_key_sizes() example

= mcrypt_module_open ( ‘rijndael-256’ , » , ‘ecb’ , » );
var_dump ( mcrypt_enc_get_supported_key_sizes ( $td ));
?>

PHP cryption на сервере не будет работать функция «mcrypt_get_iv_size»

Поэтому я писал веб-приложение и для некоторых целей мне нужно зашифровать строку и расшифровать ее позже, и все, что от моего кода отлично работает на localhost, на Macbook на El Capitan 10.11.4 и XAMPP 5.6.15-1, но когда я загружаю код на сервере это просто не работает. Я нашел одну проблему (также я попробовал на нескольких серверах).

Итак, это мой код:

и это отголоски просто для тестирования, какая линия не будет работать. Поэтому, когда я пытаюсь запустить все это, он просто напечатает «—— 1 —— и —— 2 ——», код после

просто не работает на сервере, кто-нибудь знает почему?

EDIT: я нашел ошибку, это была проблема с хостингом, они делают некоторые странные вещи, спасибо в любом случае!

Шифрование данных на PHP

Дата публикации: 2013-11-18

От автора: в данном уроке мы с Вами рассмотрим шифрование данных стандартными средствами языка PHP. Так как при создании различных скриптов очень часто возникает задача шифрования данных. К примеру, важную информацию, которую необходимо сохранить в куках, можно зашифровать для повышения безопасности сайта.

Введение

В данном уроке мы с Вами не будем рассматривать все теоретические моменты процесса шифрования данных, так как для этого понадобиться несколько уроков. Мы изучим только основы, но их полнее будет достаточно, что бы Вы смогли зашифровать данные и выполнить их расшифровку.

Шифрование бывает двух видов: однонаправленное – когда данные можно только зашифровать, а расшифровать нельзя (к примеру, шифрование md5) и двунаправленное – когда есть возможность, как зашифровать, так и расшифровать данные. В данном уроке мы будем использовать двунаправленное шифрование. Для работы с шифрованием в языке PHP разработано расширение под названием mcrypt, которое позволяет шифровать данные используя различные алгоритмы шифрования (шифры).

Как создать сайт самому?

Какие технологии и знания необходимы сегодня, чтобы создавать сайты самостоятельно? Узнайте на интенсиве!

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

Так как шифрование данных – это целая наука и при создании собственного алгоритма, Вы можете не учесть множество различных моментов. Что приведет к уязвимости зашифрованных данных и возможно к взлому их злоумышленниками. Лучше всего использовать уже готовые алгоритмы, которые очень надежны и, так сказать, проверены временем. Алгоритм шифрования – это собственно то, каким образом будут зашифрованы данные.

Каждый алгоритм поддерживает различные режимы шифрования. Режим шифрование – это метод применения блочного шифра, который позволяет преобразовать последовательность блоков исходного текста, который шифруется, в последовательность блоков зашифрованных данных. При этом при шифровании могут использоваться данные других блоков. Мы с Вами будем использовать один из лучших режимов шифрования — MCRYPT_MODE_CFB. Данный режим, еще называют режимом обратной связи по шифрованному тексту, т.е — это такой вариант использования блочного шифра, при котором для зашифровки следующего блока текста используется результат зашифровки предыдущего блока.

Полную документацию, по расширению mcrypt можно посмотреть на официальном сайте интерпретатора языка PHP, по адресу: http://us3.php.net/manual/ru/book.mcrypt.php

Полный перечень всех алгоритмов шифрования можно посмотреть по следующей ссылке: http://us3.php.net/manual/ru/mcrypt.ciphers.php

Теперь давайте приступим к шифрованию данных.

Шифрование данных

Для начала давайте создадим небольшую форму для ввода текста, подлежащего шифрованию:

PHP расшифровывает данные (зашифрованные с помощью mcrypt) с помощью openssl

У меня есть база данных, полная данных, зашифрованных в 3DES (ECB), которая была зашифрована с помощью библиотеки php Mcrypt. Поскольку Mcrypt удален, мне нужно переключиться на OpenSSL, чтобы расшифровать его. Все данные будут перешифрованы с использованием xchacha20-poly1305-ietf.

Поэтому мне не нужны комментарии о том, что 3DES не является безопасным, а ECB плохим и т. Д., Мы знаем, поэтому мы пытаемся расшифровать, чтобы иметь лучший алгоритм шифрования.

Ниже приведен код, который использовался для шифрования с использованием mcrypt, и 1 строка, которую мы пытаемся использовать (openssl) для ее расшифровки. Это всегда возвращает ложь, и мы задаемся вопросом, почему.

Я начинаю подозревать, что проблема в библиотеке mcrypt, использующей 8-байтовый IV, в то время как открытый SSL говорит, что это должно быть 0 байт.

Буду признателен за любую помощь, чтобы найти способ расшифровки значений с помощью openssl.

Что такое код mcrypt_enc_get_iv_size

228 просмотра

1 ответ

1 Репутация автора

Мне нужно шифрование во всех запросах API и ответ я использую следующий код. Но зашифрованное значение php-кода не совпадает с тем, которое генерирует Android.

Код Android (для шифрования и дешифрования):

Ответы (1)

2 плюса

67116 Репутация автора

Предполагается, что шифротекст неотличим от случайного. Это главная причина для уникального или — в случае режима CBC — случайного IV. Если бы вы использовали статический IV (и тот же ключ), вы получили бы тот же (первые блоки) зашифрованного текста для того же (первые блоки) открытого текста. Другими словами, вы будете передавать информацию злоумышленнику.

Вот почему вы должны использовать случайный IV, который вы можете безопасно хранить вместе с зашифрованным текстом. Шифрование лучше всего проверить дешифрованием. Генерация подписи также может быть лучше проверена с проверкой подписи. Если вам удастся сгенерировать один и тот же зашифрованный текст CBC дважды, это свидетельствует о том, что что-то не так, а не что-то не так.

Что такое код mcrypt_enc_get_iv_size

mcrypt_enc_get_iv_size — возвращает размер IV открытого алгоритма.

Описание

int mcrypt_enc_get_iv_size (resource td)

Эта функция возвращает размер в байтах iv алгоритма, специфицированного дескриптором шифрования. Если возвращает ‘0’, IV игнорируется в этом алгоритме. IV используется в режимах cbc, cfb и ofb и в некоторых алгоритмах режима stream.


Назад Оглавление Вперёд
mcrypt_enc_get_block_size Вверх mcrypt_enc_get_key_size

Материалы, которые находятся на этой страничке, любезно предоставлены Игорем Ивановым

Ошибка при шифровании файла с использованием Mcrypt DES в php

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

Я получаю ниже ошибки. Пожалуйста, помогите мне решить эту проблему.

php encryption encryption-symmetric mcrypt des

1 ответ

0 Mr. Llama [2020-04-01 17:07:00]

Перед использованием функции pkcs5_pad необходимо убедиться, что у вас установлен модуль mcrypt, настроен и включен. Установка и настройка будут отличаться в зависимости от вашей платформы, поэтому, пожалуйста, обратитесь к документации для получения помощи.

Илон Маск рекомендует:  Что такое код cpdf_page_init
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL