我尝试在一个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;
?>
有人可以就此问题提出建议吗?是我试图做的甚至可能吗?
答案 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