【发布时间】:2016-04-06 17:48:32
【问题描述】:
我正在尝试加密一个 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;
?>
有人可以就这个问题提出建议吗?我正在尝试做的事情有可能吗?
【问题讨论】:
-
mcrypt_create_iv 使用 MCRYPT_MODE_ECB 和 mcrypt_encrypt,mcrypt_decrypt 使用 MCRYPT_MODE_CBC....尝试使用其中任何一个!
-
请注意,您将未经身份验证的密文存储在客户端上,这会使您的表单容易受到选择密文攻击。请不要自己动手;请查看defuse's library。 (它是 MIT 许可的。)
-
@ScottArciszewski,我最终选择了
BLOWFISH -
为什么要使用河豚而不是化解? Blowfish 未经过身份验证。
-
@ScottArciszewski,我真的不需要验证值!我只需要一种方法来加密
$variable,这样用户就无法在浏览器中看到它,因为它位于隐藏的 html 输入中,然后在下一页再次解密。
标签: php encryption