2012-10-07 11 views
0

카운터 모드에서 AES로 암호화 된 문자열이 있는데 PHP로 처리되지 않았으므로 mcrypt로 해독 할 수 없습니다. (예상대로 작동하는 클래스가 있습니다. http://www.movable-type.co.uk/scripts/aes.html (페이지 하단 참조)하지만, 느린 그래서 Mcrypt 라이브러리로 해독 할PHP : mcrypt를 사용하여 카운터 모드에서 AES 암호 해독

을 수업에 따르면 decrypt 방법 나는 다음 않았다.

$key = $_POST['key']; 

$length = strlen($key); 
if($length > 32) 
    $key = substr($key, 0, 32); 

$cyphered = base64_decode($_POST['cyphered']); 
/// make initialization vector with first 8 bytes treated as integers 
$f8b = array_map('ord', str_split(substr($cyphered, 0, 8))); 
array_unshift($f8b, 'I8'); 
$iv = call_user_func_array('pack', $f8b); 

print mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, substr($cyphered, 8), 'ctr', $iv); 

을 그리고 결과는 출력에 쓰레기 :(I 돈 내가 뭘 잘못하고 있는지 이해하지 못한다. 누군가가이 문제에 관해 밝혀 줄 수 있겠는가?

+0

당신은 지금까지 문제를 해결했을지 모르지만 나는 원래 플랫폼과 암호화 라이브러리가 원래 암호화 된 문자열인지 궁금합니다. – curtisdf

답변

0

phpseclib's pure PHP AES implementation는 빠른 속도로 움직일 수있는 유형의 AES 구현 거의 4 배입니다 :

http://phpseclib.sourceforge.net/crypt/examples.html

을 그리고 Mcrypt 라이브러리를 사용할 수없는 때이다. mcrypt를 사용할 수있게되면이를 사용하고 더욱 빨라집니다.

그렇다면 mcrypt를 사용하기를 강력히 주장한다면 ... MCRYPT_RIJNDAEL_128을 사용해보십시오. MCRYPT_RIJNDAEL_256의 블록 크기는 256 비트이며 Rijndael (Rijndael은 가변 블록 크기를 가짐)에서는 작동하지만 AES에서는 작동하지 않습니다.

+0

1. 그것은 잘 풀리지 않았다 : (IV = 16 바이트 크기를 사용하지만, 내가 사용한 클래스는 8을 사용한다. 2. 다른 의존성에서 드래그 할 수 없다. ( – Daniel

+0

IV가 있어야한다. 블록 크기와 동일합니다. 표시된 클래스가 IV를 null로 채우는 것이 가능할 수 있습니다. – neubert