2012-10-07 55 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); 

而結果是在輸出垃圾:(我不我不明白我做錯了什麼,請問有人能解決這個問題嗎?

+0

你現在可能已經解決了這個問題,但我只是好奇什麼平臺,加密庫是最初加密的字符串? – curtisdf

回答

0

phpseclib's pure PHP AES implementation幾乎4倍一樣快,Movable Type的AES實現:

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必須是等於塊的大小,可能你所顯示的類是null填充IV。 – neubert