2012-11-21 5 views
3

내 PHP intall 문제가있을 수 있습니다 생각합니다. 나는이 작업을 수행 할 때 내가 얻을mcrypt_decrypt PHP의 올바른 사용

경고 : mcrypt_decrypt() [function.mcrypt-해독] : 모듈의 초기화가 나는 다음과 같은 문자열을 해독하는 코드의 작은 조각을 쓰고 있어요

실패 모드 ECB를 사용하여 AES-128로 암호화됩니다. (base64로 인코딩)

키 : (base64로 인코딩) aXJhbmRvbXNlY3VyZWtleQ의 ==

암호화 된 문자열> : 3l6xiNdgRG + PkBw5M0lawvJ/fmuTZPRhEcbtqAmOpDI =

내가 모듈 오류가 점점 계속.

이 내가 시도 것입니다 :

<?PHP 
$retval = mcrypt_decrypt("AES-128", 
    base64_decode("aXJhbmRvbXNlY3VyZWtleQ=="), 
    base64_decode("3l6xiNdgRG+PkBw5M0lawvJ/fmuTZPRhEcbtqAmOpDI") , 
    "ECB"); 

echo $retval; 
?> 

여기 내 관련은 phpinfo입니다. 나는 AES-128을 보지 못했다. 어쩌면 그게 문제 야.

mcrypt 
    mcrypt support enabled 
    Version  2.5.8 
    Api No 20021217 
    Supported ciphers cast-128 gost rijndael-128 twofish arcfour  cast-256   loki97  rijndael-192 saferplus wake blowfish-compat des rijndael-256 serpent xtea blowfish enigma rc2 tripledes 
    Supported modes  cbc cfb ctr ecb ncfb nofb ofb stream 
+0

글쎄, 코드를 보여줄 수 있습니까? – Ibu

+0

phpinfo()를 게시하십시오. 이것은 아마도 코드에는 문제가되지 않지만 PHP를 설치하면됩니다. –

답변

5

가까운 2 개의 작은 문제가 있습니다.

먼저 AES-128은 mcrypt의 유효한 암호 상수가 아닙니다. AES는 정말로 당신이지지하는 rijndael입니다. AES-128 용 mcrypt cipher constantMCRYPT_RIJNDAEL_128이며 문자열은 rijndael-128입니다. 둘째, mcrypt 모드는 소문자 여야합니다.

<?php 
$retval = mcrypt_decrypt("rijndael-128", 
    base64_decode("aXJhbmRvbXNlY3VyZWtleQ=="), 
    base64_decode("3l6xiNdgRG+PkBw5M0lawvJ/fmuTZPRhEcbtqAmOpDI") , 
    "ecb"); 

echo $retval; 

이 올바른 출력을 얻을 수 :

에 코드를 변경 개인적으로 Is 3 random enough?

를, 차라리 실제 문자열보다 Mcrypt 라이브러리 상수로 이동, 그래서 MCRYPT_RIJNDAEL_128ecbrijndael-128을 대체 할 것 MCRYPT_MODE_ECB.

민감한 정보를 많이 암호화하는 경우 ECB 대신 IV가있는 CBC를 사용하는 것이 좋습니다.

Mcrypt는 적절한 길이의 IV를 쉽게 만들 수 있습니다. 샘플 코드 :

$ivsize = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC); 
$iv  = mcrypt_create_iv($ivsize); 

암호화 및 암호 해독시이 IV를 사용하십시오. IV를 이식을 위해 base64 인코딩 된 문자열로 데이터와 함께 전달할 수 있습니다.

+0

+1 mcrypt 상수 및 CBC 사용 권장 사항. IV를 올바르게 만드는 방법을 확장 할 것입니다. 사람들이 IV를 잘못 사용하는 것을 종종 봅니다. – NullUserException

+0

정말 고마워요. 내가이 직업을 얻으면 페이팔의 액수가 얼마인지 물을 수도 있습니다. 사실 나는 아직도 태평양에 있습니다. 고마워요. – hforbess

+0

@hforbess 자세한 질문을 게시 해 주셔서 감사합니다. 질문이 있으시면 언제든지 연락하십시오. – drew010