PHP:使用POST在一个页面中加密字符串,在另一个页面中解密?

PHP:使用POST在一个页面中加密字符串,在另一个页面中解密?,php,encryption,Php,Encryption,我正在尝试对一个php页面中的字符串进行加密,并使用$\u POST[]将其传递到另一个页面,然后再次对其进行解密 加密工作正常,但当我将其发布到另一个页面进行解密时,它根本没有被解密,我再次得到另一个加密字符串 这是我在第1页加密的代码: <?php /* * PHP mcrypt - Basic encryption and decryption of a string */ $string = "somemails@yahoo.co.uk"; $secret_key = "Thi

我正在尝试对一个php页面中的字符串进行加密,并使用$\u POST[]将其传递到另一个页面,然后再次对其进行解密

加密工作正常,但当我将其发布到另一个页面进行解密时,它根本没有被解密,我再次得到另一个加密字符串

这是我在第1页加密的代码:

<?php
/*
 * PHP mcrypt - Basic encryption and decryption of a string
 */
$string = "somemails@yahoo.co.uk";
$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>
<?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。因此,您需要使用与加密相同的IV。因此,我建议您也发布IV值,或使用特定的IV,例如:

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

这就像一个符咒,它解密了第二页中的值,但我在两页上都遇到了这个错误:
警告:mcrypt_encrypt()[function.mcrypt encrypt]:IV参数必须与blocksize一样长
尝试使用POST发送IV,而不是使用您自己的IV。我确实尝试将其作为POST发送,但不起作用,我在第二页上再次获得加密字符串,但当我使用自己的“Secret IV”时,它在第二页上起作用,但在第1页和第2页上都出现了错误。实际上,Mangesh是对的(在评论中),您使用两种模式,只尝试一种mcrypt模式。mcrypt_create_iv使用mcrypt_模式ECB和mcrypt_encrypt,mcrypt_decrypt使用mcrypt_模式CBC…尝试使用其中任何一种!请注意,您正在客户端上存储未经身份验证的密文,这使您的表单容易受到选定密文攻击。请不要自己滚;退房吧。(这是麻省理工学院许可的。)@ScottArciszewski,我最后选择了
河豚
为什么选择河豚而不是排毒?河豚没有经过身份验证。@ScottArciszewski,我真的不需要对值进行身份验证!我只需要一种方法来加密
$变量
,这样用户就无法在浏览器中看到它,因为它位于隐藏的html输入中,然后在下一页再次解密它。