2016-04-06 9 views
1

私は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毎回を生成します。

+1

mcrypt_create_ivがMCRYPT_MODE_ECBとMCRYPT_ENCRYPTを使用しています....それらのいずれかを使用してみてください:だから私はあなたがあまりにもIV値を投稿したり、などの代わりに、特定のIVを使用することをお勧め! –

+0

クライアントに認証されていない暗号テキストを保存しているため、フォームが選択された暗号テキスト攻撃に対して脆弱になることに注意してください。あなた自身をロールしないでください。代わりに、[defuseのライブラリ](https://github.com/defuse/php-encryption)をチェックしてください。 (それはMITのライセンスです) –

+0

@ScottArciszewski、私は 'BLOWFISH'に行くことになった – rooz

答えて

2

は、次の行を守ってください。そのため、暗号化に使用したのと同じIVを使用する必要があります。 MCRYPT_DECRYPTはMCRYPT_MODE_CBCを使用して、

$iv = "My Secret IV"; //On both pages 
+0

これは魅力的な働きをして、2ページ目の値を復号化しますが、次の両方のページでこのエラーが発生します: '警告:mcrypt_encrypt()[function.mcrypt-encrypt]:IVパラメータはブロックサイズ' – rooz

+0

あなた自身のIVを使用する代わりに、POSTを使ってIVを送信してみてください。 – Manikiran

+0

POSTとして送信しようとしましたが、動作しませんし、2番目のページで暗号化された文字列を再度取得しますが、自分自身の「秘密IV」を使用すると2番目のページで動作しますが、 1ページ目と2ページ目。 – rooz

関連する問題