2012-09-13 45 views
1

我想加密一個xml字符串,將它保存在某處,然後稍後解密(在cbc模式下使用blowfish)。Php Blowfish解密加擾數據

當我解密字符串時,它會加擾前4個字符。

$text = "<?xml version="1.0" encoding="ISO-8859-1"?> ...."; 
$td = mcrypt_module_open('blowfish', '', 'cbc', ''); 
$iv = 'kd84h28v'; 
$ks = mcrypt_enc_get_key_size($td); 
$key = substr(md5('randomString1234'), 0, $ks); 
mcrypt_generic_init($td, $key, $iv); 
$cypher = mcrypt_generic($td, $text); 
print mdecrypt_generic($td, $cypher); 

# prints: çGÖºÌrsion="1.0" encoding="ISO-8859-1"?> 

我會用ecb模式,而不是 - 這解密精 - 除了目前的PHP執行忽略IV。

任何想法我做錯了什麼?

+0

歐洲央行不支持IV,它不是一個實現細節。這就像說「我會騎摩托車,除了目前的本田車型不帶四個車輪。」 – NullUserException

回答

0

manual

與 mcrypt_generic_init()嘗試對數據進行解密之前重新初始化加密緩衝區是非常重要的。

所以,你可能需要這樣的事:

mcrypt_generic_init($td, $key, $iv); 
$cypher = mcrypt_generic($td, $text); 
mcrypt_generic_deinit($td); 
mcrypt_generic_init($td, $key, $iv); 
print mdecrypt_generic($td, $cypher); 
+0

工作,謝謝。雖然我想知道爲什麼我不需要解密ecb? –

+0

我懷疑這與不同的填充方式有關,但我對mcrypt內部信息不夠了解,並且沒有任何信心。 – Nim