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()
我不明白爲什麼它只適用於短/簡單的數據?
**切勿使用CBC模式,使用靜態IV **。它是確定性的,因此不具有語義安全性。你至少應該使用隨機的IV。它不必是保密的,所以你可以將它和密文一起發送。雖然,最好是對密文進行身份驗證,以便像[padding oracle attack](http://crypto.stackexchange.com/q/18185/13022)這樣的攻擊是不可能的。這可以通過驗證模式(如GCM或EAX)或[加密 - 然後MAC](http://crypto.stackexchange.com/q/202/13022)方案完成。 –
我來這裏說什麼@ArtjomB。說過。 –
謝謝你的建議,我會改變我的代碼。 – Khorwin