Мы используем встроенную базу данных Seeding в Laravel 5.3 под PHP 7.0 в Windows. Проблема заключается в том, что всякий раз, когда мы используем mcrypt_encrypt для шифрования некоторых данных, данные, которые мы получаем обратно от mcrypt_decrypt не то же самое, что мы прошли в.mcrypt_decrypt не возвращает правильные данные только при использовании в посеве Laravel
$data = @mcrypt_encrypt(MCRYPT_RIJNDAEL_128, self::$key, $data, MCRYPT_MODE_CFB, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0");
$data = @mcrypt_decrypt(MCRYPT_RIJNDAEL_128, self::$key, $data, MCRYPT_MODE_CFB, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0");
В этом случае $ данных некоторая двоичная строка, а не оригинал строка.
- Этот только происходит во время посева. mcrypt_encrypt/mcrypt_decrypt будет работать через веб-запрос или возиться.
- Мы знаем, что это устарело. Мы должны использовать mcrypt_encrypt в отличие от более позднего шифрования (https://laravel.com/docs/5.3/encryption), потому что у нас есть устаревшие данные, уже зашифрованные с помощью mcrypt_encrypt.
- $ ключ является статической переменной, которая загружает из шифрования ключа
- Это не ошибка или предупреждение указывает на проблему
Кто-нибудь есть идея о том, что может быть здесь происходит?
Нет, вам не нужно использовать mcrypt, поскольку данные были зашифрованы им, AES (что и есть RIJNDAEL_128) является стандартом и может быть расшифрован другими реализациями AES. Единственная проблема - заполнение должно быть обработано в вашем коде. – zaph
FYI, для репликации 'MCRYPT_RIJNDAEL_128',' MCRYPT_MODE_CFB' с OpenSSL, используйте 'aes-128-cfb8' в качестве метода. – Narf
Лучше всего не использовать mcrypt, он оставался без изменений уже почти десять лет. Поэтому он устарел и будет удален из ядра и в PECL в PHP 7.2. Он не поддерживает стандартное дополнение PKCS # 7 (née PKCS # 5), только нестандартное нулевое заполнение, которое нельзя даже использовать с двоичными данными. В mcrypt есть много выдающихся [ошибок] (https://sourceforge.net/p/mcrypt/bugs/), относящихся к 2003 году. – zaph