我正在使用php decrypion检查:回复请求的电子邮件地址与发送请求的电子邮件地址相同。
这是代码,但在底部它简直失败。
网址简单:
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;
回显$ email_key3时返回的内容是以某种方式编码的 - 应该是me@me.com
我可能错过了一些显而易见的东西,但它已经失去了我!
答案 0 :(得分:0)
您无法在每个页面上生成新的IV
- 您必须将加密步骤中的IV
存储在文件或数据库中 - 或者将其附加到加密的字符串中。在下一页上生成新IV将不允许您解密字符串。
另外,如果可能的话,我会传递电子邮件的哈希值(加上盐) - 而不是加密的表格。
答案 1 :(得分:-1)
我注意到您使用的加密方法是添加随机盐。这意味着使用相同的密钥加密相同的字符串不会产生相同的输出。 尝试使用非随机KDF。 试试这个主题的答案:https://stackoverflow.com/a/1289114/1745542