【问题标题】:php decryption failing from URLphp解密从URL失败
【发布时间】: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


【解决方案1】:

我注意到您使用的加密方法是添加随机盐。这意味着用相同的密钥加密相同的字符串不会产生相同的输出。 尝试使用非随机 KDF。 试试这个题目的答案:https://stackoverflow.com/a/1289114/1745542

【讨论】:

【解决方案2】:

您不能在每个页面上生成新的IV - 您必须将加密步骤中的IV 存储在文件或数据库中 - 或将其附加到加密字符串中。在下一页生成新的 IV 将不允许您解密字符串。

另外,如果可能的话,我会传递电子邮件的哈希值(加上盐)——而不是加密形式。

【讨论】:

  • 当我进行 AES 加密/解密时,我每次都通过:$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND); 创建一个随机 IV,只要我有相同的密钥和 iv 大小,我相信它应该可以工作(并且确实),除非那是什么特定于该算法?
  • 如果不同的 IV 同时适用于输入和输出 - IV 的意义何在?您的算法不需要它,或者它需要相同。
猜你喜欢
  • 2018-11-28
  • 2016-03-17
  • 1970-01-01
  • 2013-01-29
  • 2023-01-30
  • 2011-08-27
  • 1970-01-01
  • 2018-02-23
  • 2018-05-10
相关资源
最近更新 更多