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

时间:2016-04-06 09:44:00

标签: php encryption

我尝试在一个php页面中加密一个字符串,然后使用$ _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>

这是第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;
?>

有人可以就此问题提出建议吗?是我试图做的甚至可能吗?

1 个答案:

答案 0 :(得分:2)

请注意以下一行:

$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