2016-03-22 12 views
2

我使用here的aesEncryptWithStaticIV()來加密數據。解密從iOS接收的數據在大數據上失敗 - PHP

對於文本數據「測試」,函數給我加密結果065TnFFNwQFRjPZk6l8luw== 和PHP成功解密它。

但隨着 '真實' 數據

如: 「progression|*|D4E1B270-06DD-4A|*|25|*|342|*|159|*|10|*|1457454939636.0

PHP不正確解密數據,給我 「m/^(_2<=Q9KBu#~<,s+z'sS)\\nrMc-o|PCxJNo/

這裏是php解密函數:

function decrypt($data) { 
    $code = base64_decode (urldecode ($data)); 
    $iv = $this->iv; 
    $td = mcrypt_module_open('rijndael-128', '', 'cbc', $iv); 
    mcrypt_generic_init($td, $this->key, $iv); 
    $decrypted = mdecrypt_generic($td, $code); 
    mcrypt_generic_deinit($td); 
    mcrypt_module_close($td); 
    return trim(preg_replace('/[\x00-\x1F\x80-\xFF]/', '', $decrypted)); 
} 

和她e數據加密程序(由http post發送):

let dump = try! data.stringByAddingPercentEncodingForRFC3986()!. aesEncrypt()

我不明白爲什麼它只適用於短/簡單的數據?

+2

**切勿使用CBC模式,使用靜態IV **。它是確定性的,因此不具有語義安全性。你至少應該使用隨機的IV。它不必是保密的,所以你可以將它和密文一起發送。雖然,最好是對密文進行身份驗證,以便像[padding oracle attack](http://crypto.stackexchange.com/q/18185/13022)這樣的攻擊是不可能的。這可以通過驗證模式(如GCM或EAX)或[加密 - 然後MAC](http://crypto.stackexchange.com/q/202/13022)方案完成。 –

+0

我來這裏說什麼@ArtjomB。說過。 –

+0

謝謝你的建議,我會改變我的代碼。 – Khorwin

回答

0

只需刪除從PHP urldecode(),不明白爲什麼,但它corrompt的數據,但在視覺上有沒有差異?