【问题标题】:Password decryption not working after passing in URL输入 URL 后密码解密不起作用
【发布时间】:2012-07-12 07:43:12
【问题描述】:

我正在使用以下technique 来加密/解密密码:

$key = 'abcd';
$password = 'password';

$encrypted_password = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($key), $password, MCRYPT_MODE_CBC, md5(md5($key))));

$decrypted_password = rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($key), base64_decode($encrypted_password), MCRYPT_MODE_CBC, md5(md5($key))), "\0");

Above code is working for me on same page

但是当我将 URL 中的加密密码传递到另一个网页时,例如:

example.com/authenticate.php?pass=CuESFcvXHnQkZaY79WUL3U2aY9TROkjZFETk9Ur+iFY=

然后它没有使用相同的密钥将其解密回原始形式,结果我得到了一些垃圾数据。

我认为它类似于 url 编码/解码问题?

有没有办法解决这个问题?

谢谢

【问题讨论】:

  • 为什么要在 URL 中传递密码?你不能使用会话或不透明的令牌吗?
  • 这看起来有点矫枉过正。有什么理由不使用哈希密码代替吗?您甚至不需要密码的可逆算法。实际上,您应该避免尝试提出自己的密码加密/哈希方案...
  • 因为我的移动项目是单独的,而我的 Web 应用程序是单独的项目,所以这就是为什么我使用这个东西从我的移动站点登录网站.. 以及任何其他替代解决方案来登录 Web 项目来自移动网站..
  • 但是您在服务器端进行密码处理,您访问网站的位置并不重要。
  • 适当的方式将是一个 Oauth 或类似 OpenID 的基于令牌的登录系统,如果简单的 cookie/会话不能解决它。当然,这也复杂得多......

标签: php passwords md5 encryption


【解决方案1】:

你猜对了:

您应该在将 pass 参数附加到查询字符串之前对其进行 urlencode。

urlencode($encrypted_password);

然后在解密前进行urldecode

urldecode($encrypted_password);

编码愉快!

【讨论】:

    【解决方案2】:

    + 在 URL 中代表一个空格。如果您想在 URL 中传递任意数据,尤其是可能包含特殊字符的数据,请在将其放入 URL 之前urlencode

    【讨论】:

      猜你喜欢
      • 2018-11-22
      • 1970-01-01
      • 1970-01-01
      • 2017-11-10
      • 2018-04-26
      • 1970-01-01
      • 2014-12-28
      • 2016-11-07
      • 1970-01-01
      相关资源
      最近更新 更多