私は1つのPHPページで文字列を暗号化し、$ _POST []を使用して別のページに渡して、もう一度解読しようとしています。PHP:1つのページで文字列を暗号化し、POSTを使用して別のページで暗号化を解除しますか?
暗号化はうまく動作しますが、別のページにPOSTして暗号化を解除すると、復号化されず、暗号化された別の文字列が再び表示されます。
これは私が暗号化し、1ページのコードです:
<?php
/*
* PHP mcrypt - Basic encryption and decryption of a string
*/
$string = "[email protected]";
$secret_key = "This is my secret key";
// Create the initialization vector for added security.
$iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB), MCRYPT_RAND);
// Encrypt $string
$encrypted_string = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $secret_key, $string, MCRYPT_MODE_CBC, $iv);
// Decrypt $string
$decrypted_string = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $secret_key, $encrypted_string, MCRYPT_MODE_CBC, $iv);
echo "Original string : " . $string . "<br />\n";
echo "Encrypted string : " . $encrypted_string . "<br />\n";
echo "Decrypted string : " . $decrypted_string . "<br />\n";
?>
<form action="2.php" method="post">
<input type="text" id="" name="input" value="<?php echo $encrypted_string; ?>"/>
<button type="submit" >submit</button>
</form>
そして、これは私が再び解読しようとしているページ2のコードです:
<?php
$input = $_POST['input'];
$secret_key = "This is my secret key";
// Create the initialization vector for added security.
$iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB), MCRYPT_RAND);
// Encrypt $string
$encrypted_string = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $secret_key, $input, MCRYPT_MODE_CBC, $iv);
// Decrypt $string
$decrypted_string = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $secret_key, $encrypted_string, MCRYPT_MODE_CBC, $iv);
echo $decrypted_string;
?>
誰かがこの問題について助言してもらえますか?私も可能なことをしようとしているのですか?
$iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB), MCRYPT_RAND);
それはあなたがそれを呼び出すランダムIV毎回を生成します。
mcrypt_create_ivがMCRYPT_MODE_ECBとMCRYPT_ENCRYPTを使用しています....それらのいずれかを使用してみてください:だから私はあなたがあまりにもIV値を投稿したり、などの代わりに、特定のIVを使用することをお勧め! –
クライアントに認証されていない暗号テキストを保存しているため、フォームが選択された暗号テキスト攻撃に対して脆弱になることに注意してください。あなた自身をロールしないでください。代わりに、[defuseのライブラリ](https://github.com/defuse/php-encryption)をチェックしてください。 (それはMITのライセンスです) –
@ScottArciszewski、私は 'BLOWFISH'に行くことになった – rooz