2016-11-29 10 views
-1

Windows의 PHP 7.0에서 Laravel 5.3의 Database Seeding을 사용하고 있습니다. 문제는 우리가 어떤 데이터를 암호화 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

참고로,'MCRYPT_RIJNDAEL_128','MCRYPT_MODE_CFB'을 OpenSSL로 복제하려면 'aes-128-cfb8'을 메소드로 사용하십시오. – Narf

+2

mcrypt를 사용하지 않는 것이 가장 좋습니다. 지금은 거의 10 년 동안 폐기되었습니다. 그러므로 PHP 7.2에서 비추천되었으며 PECL에서 제거 될 것입니다. 표준 PKCS # 7 (nee PKCS # 5) 패딩을 지원하지 않으며, 바이너리 데이터로도 사용할 수없는 비표준 널 패딩 만 지원합니다. mcrypt는 2003 년으로 거슬러 올라가는 많은 [버그] (https://sourceforge.net/p/mcrypt/bugs/)를 가지고 있습니다. – zaph

답변

0

zaph 및 일부 영혼 검색의 피드백을 기반으로 암호화 된 데이터를 마이그레이션하고 더 현대적인 것을 사용할 것입니다. 대부분의 경우 여전히 작동하기 때문에 우리는 그것을 피했습니다. 그러나 우리는 단지 피할 수없는 것을 연기하고 있습니다. 의견을 보내 주셔서 감사합니다.

+0

[defuse] (https://github.com/defuse/php-encryption) 또는 [RNCryptor] (https://github.com/RNCryptor)는 완벽한 솔루션을 제공하며 유지 보수가 잘되고 올바른 것입니다. – zaph