2017-02-16 9 views
3

mcrypt가 PHP 7.1에서 사용되지 않으므로 mcrypt에서 OpenSSL로 PHP 코드를 마이그레이션하는 방법은 기존 프로젝트의 mcrypt로 많은 양의 데이터를 암호화/해독 할 수 있습니까? 나는 다음과 같은 코드를 암호화 할 수 있습니다이전에 mcrypt로 암호화 된 OpenSSL을 사용하여 문자열을 해독하는 방법은 무엇입니까?

$encoded = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, 'salt', 'source string', MCRYPT_MODE_ECB)); 

및 암호 해독 코드는 다음과 같습니다

내가 인코딩 된 데이터 변환없이 같은 결과를 얻을 수 위의 예에서 무엇을 사용해야 openssl_ 기능
$source = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, 'salt', base64_decode('encoded string'), MCRYPT_MODE_ECB); 

?

또는 유일한 방법은 mcrypt를 사용하여 암호화 된 내 모든 데이터를 해독하고 openssl로 인코딩하는 스크립트를 실행하는 것입니다.

감사합니다.

+0

ECB 모드를 사용하지 마십시오. 안전하지 않습니다. [ECB 모드] (https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Electronic_Codebook_.28ECB.29)를 참조하고 펭귄까지 스크롤하십시오. – zaph

+0

[mcrypt를 openssl로 바꾸십시오] (http://stackoverflow.com/q/9993909/608639)? – jww

답변

2

OpenSSL에는 Rijndael-256 암호가 없습니다. 이에 상응하는 것은 없습니다. 모든 것을 해독하고 다시 암호화해야합니다.

뿐만 아니라 :

  • 하는 당신은 패딩과 인증을 놓치고있어.
  • ECB 모드를 사용하지 마십시오.
  • "salt"는 적절한 암호화 키가 아니며 일반 문자열도 아닙니다. 키를 생성하려면 random_bytes()을 사용하십시오.의 올바른 키 길이를 가진 을 사용하십시오.

의 모든 위 다음과 같이 요약 될 수있다 : 를, 자신에 그것을 할 defuse/php-encryption처럼 잘 심사 라이브러리를를 사용하지 마십시오.

암호는 단순한 것이 아니며 단지 5 줄의 코드만으로는 올바르게 수행 할 수 없습니다.

+0

답장을 보내 주셔서 감사합니다. 적절한 random_bytes() 길이를 제안 해 주시겠습니까? 패스워드 암호화와 같은 일반적인 웹 사이트 사용을 위해 Rijndael-256과 비슷하거나 더 나은 openssl algorythm을 조언 해 주실 수 있습니까? 내 실제 작업은 사용자 암호 암호화가 아니지만 비슷합니다. –

+0

보편적으로 좋은 길이는 없습니다 ... 알고리즘에 따라 다릅니다. 알고리즘 자체에 관해서는, 다시 - 그냥 라이브러리를 사용하십시오. – Narf