2016-11-29 3 views
-1

Мы используем встроенную базу данных 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.
  • $ ключ является статической переменной, которая загружает из шифрования ключа
  • Это не ошибка или предупреждение указывает на проблему

Кто-нибудь есть идея о том, что может быть здесь происходит?

+2

Нет, вам не нужно использовать mcrypt, поскольку данные были зашифрованы им, AES (что и есть RIJNDAEL_128) является стандартом и может быть расшифрован другими реализациями AES. Единственная проблема - заполнение должно быть обработано в вашем коде. – zaph

+0

FYI, для репликации 'MCRYPT_RIJNDAEL_128',' MCRYPT_MODE_CFB' с OpenSSL, используйте 'aes-128-cfb8' в качестве метода. – Narf

+2

Лучше всего не использовать mcrypt, он оставался без изменений уже почти десять лет. Поэтому он устарел и будет удален из ядра и в PECL в PHP 7.2. Он не поддерживает стандартное дополнение PKCS # 7 (née PKCS # 5), только нестандартное нулевое заполнение, которое нельзя даже использовать с двоичными данными. В mcrypt есть много выдающихся [ошибок] (https://sourceforge.net/p/mcrypt/bugs/), относящихся к 2003 году. – zaph

ответ

0

Основываясь на отзывах от zaph и поиске души, мы собираемся перенести наши зашифрованные данные и использовать что-то более современное. Мы избегали этого, потому что он по-прежнему работает в большинстве случаев. Но мы просто откладываем неизбежное. Спасибо за ответ.

+0

Рассмотрите возможность использования [defuse] (https://github.com/defuse/php-encryption) или [RNCryptor] (https://github.com/RNCryptor), они обеспечивают полное решение, поддерживаются и верны. – zaph