今天我已經經歷了一個關於基本密碼學的速成課程,我想我不想發送一個清晰的IV,所以我用字符串對它進行了加密。用字符串加密IV並解密它?
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
$encrypt = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key1, $string, MCRYPT_MODE_CBC, $iv);
$string = $iv.$encrypt;
$encrypt = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key2, $string, MCRYPT_MODE_ECB);
$return = urlencode(base64_encode($encrypt));
和解密我這有,但它不工作
$encrypted = base64_decode(urldecode($_GET['password']));
$encrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key2, $encrypted, MCRYPT_MODE_ECB);
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
$iv = mb_strcut($encrypted, 0, $iv_size);
$password = mb_strcut($encrypted, $iv_size);
$password = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key1, $password, MCRYPT_MODE_CBC, $iv);
有人能看到我的代碼問題,向我解釋什麼,我做錯了什麼?
首先,絕對沒有理由加密IV。還有很多很好的理由不去創造你自己的密碼系統。 –
加密IV實際上使其不太安全。另見http://crypto.stackexchange.com/questions/2280/why-is-the-iv-passed-in-the-clear-when-it-can-be-easily-encrypted –
不明白什麼是downvote的意思是,人們是否試圖阻止需要幫助的人在SO上提問? @owlstead,感謝您的鏈接 – James