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를 사용해야합니다.
- $ 키는 키 암호화에서로드하는 정적 변수
- 이 오류 또는 여기에 갈 수 있는지에 대한 아이디어를 가지고 문제를
누구를 표시하는 경고입니까?
아니요 데이터가 암호화 되었기 때문에 mcrypt를 사용할 필요가 없습니다. AES (RIJNDAEL_128)는 표준이며 다른 AES 구현에 의해 해독 될 수 있습니다. 한 가지 문제는 코드에서 패딩을 처리해야한다는 것입니다. – zaph
참고로,'MCRYPT_RIJNDAEL_128','MCRYPT_MODE_CFB'을 OpenSSL로 복제하려면 'aes-128-cfb8'을 메소드로 사용하십시오. – Narf
mcrypt를 사용하지 않는 것이 가장 좋습니다. 지금은 거의 10 년 동안 폐기되었습니다. 그러므로 PHP 7.2에서 비추천되었으며 PECL에서 제거 될 것입니다. 표준 PKCS # 7 (nee PKCS # 5) 패딩을 지원하지 않으며, 바이너리 데이터로도 사용할 수없는 비표준 널 패딩 만 지원합니다. mcrypt는 2003 년으로 거슬러 올라가는 많은 [버그] (https://sourceforge.net/p/mcrypt/bugs/)를 가지고 있습니다. – zaph