【发布时间】:2012-10-05 14:44:58
【问题描述】:
我正在使用 php 解密来检查:回复请求的电子邮件地址与发送请求的电子邮件地址相同。
这是代码,但底部简单失败。
网址很简单:
blah.com/page?keyemail=fSHEk8KC17siklGHsj0HJA==
下面的代码还显示了我为确保加密/解密工作正常而进行的一些测试...我回显了代码以查看发生了什么
$key="XiTo74UI09wwe4YeUmuvbL0E";
$iv = mcrypt_create_iv (mcrypt_get_block_size (MCRYPT_TripleDES, MCRYPT_MODE_CBC), MCRYPT_DEV_RANDOM);
// Encrypting
function encrypt($string, $key) {
$enc = "";
global $iv;
$enc=mcrypt_cbc (MCRYPT_TripleDES, $key, $string, MCRYPT_ENCRYPT, $iv);
return base64_encode($enc);
}
// Decrypting
function decrypt($string, $key) {
$dec = "";
$string = trim(base64_decode($string));
global $iv;
$dec = mcrypt_cbc (MCRYPT_TripleDES, $key, $string, MCRYPT_DECRYPT, $iv);
return $dec;
}
// test example
$email = 'me@me.com';
echo "email is $email<br /><br />";
$email_key = encrypt($email, $key);
echo "key is $email_key<br /><br />";
$email_key2 = decrypt($email_key, $key);
echo "decrypted is $email_key2<br /><br />";
// END test example, all is ok
// this is the code that fails
$to_de = $_GET[keyemail];
echo "keyemail again is $to_de<br /><br />";
$email_key3 = decrypt($to_de, $key);
echo $email_key3;
当我 echo $email_key3 以某种方式编码时返回的内容 - 它应该是 me@me.com
我可能错过了一些明显的东西,但它让我失去了!
【问题讨论】:
-
既然您已经知道它通常应该来自哪个电子邮件,最好在这里使用哈希值,但是
$_GET['keyemail']的 var_dump 应该是什么而不是$_GET[keyemail],因为即使 PHP 到将 keyemail 转换为字符串,如果我没记错的话,它也会抛出 E_NOTICE。 -
还有什么回报?你也可以打印出来给我们吗?
标签: php encryption mcrypt