2013-06-12 5 views
1

나는 PHP + RIJNDAEl_128 + CBC로 다시 돌아 왔습니다.PHP MYCRYPT - McJCBC가있는 RIJNDAEL_128은 매번 다른 암호화 문자열을 제공합니다.

원시 문자열에 대한 암호화 및 암호 해독에 성공했습니다.

하지만 내가 직면 한 유일한 문제는 매번 DEPFERENT ENCRYPTION 문자열을 얻는 것입니다.

나는 항상 이상적으로 동일해야한다고 생각합니다.

class Encypt{ 

const ENCRYPTION_KEY = '3aa22e01c04c7059778c54d122b0273689fba00f4a166a66d15f7ba6a8ba8743'; 


function createQueryString(){ 
$str = "1844427316My Name Is Dave1336407610774000000000000"; 
$encStr = $this->encrypt($str); 

return $encStr; 
} 

function encrypt($strValue){ 
$iv =mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128,MCRYPT_MODE_CBC),MCRYPT_RAND); 
$encData = trim(base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_128,self::ENCRYPTION_KEY, $strValue,MCRYPT_MODE_CBC,$iv))); 
      $data['iv'] = $iv; 
      $data['encdata'] = $encData; 

      return $data; 
} 
/** 
    * Function to decrypt data using AES Encryption Symmetric Algorithm 128 bytes 
    */ 
    function decrypt($strValue, $iv){ 
      return trim(mcrypt_decrypt(MCRYPT_RIJNDAEL_128,ENCRYPTION_KEY,base64_decode($strValue),MCRYPT_MODE_CBC,$iv)); 
    } 

}  
$enc_obj = new Encypt(); 

$encstr = $enc_obj->createQueryString(); 

echo "Encrypted Str:-->".$encstr['encdata']."<br>"; 
$deCrypt = $enc_obj->decrypt($encstr['encdata'], $encstr['iv']); 
echo "Decrypted Str:-->".$deCrypt; 
+0

매번 랜덤 바이트 다이제스트이므로 해독 키와 IV를 해독 함수로 전달합니다. –

+0

프로 팁 :이 작업을 수행하지 마십시오. 라이브러리를 사용하십시오. Zend \ Crypt를 추천합니다 ... – ircmaxell

+0

@ircmaxell 어쨌든이 조합을 사용해야합니다 ... – Padyster

답변

2

는 암호화 된 텍스트 때마다받는 다른 값은 모든 실행에있는 여러 개의 IV에 대한 정상입니다 : 아래

는 코드입니다. 이것은 실제로 알고리즘의 일부이며 더 안전하게 만듭니다. 호출이 소스로 MCRYPT_RAND (시스템 난수 생성기)를 가지고 있기 때문에

1

귀하의 암호화 기능이 mcrypt_create_iv(<<iv_size>>, MCRYPT_RAND);

로 전화를 가지고, 새로운 초기화 벡터는 모든 시간은 이전의 것과는 다를 것이다 만들었습니다.

이렇게하면 암호화 된 문자열이 매번 다른 문자열이됩니다. 암호화 프로세스에서 사용 된 것과 동일한 초기화 벡터를 사용하여 cypher-text를 해독 할 수 있습니다.