【问题标题】:API encrypting url and can't decrypt with mcrypt as it returns nullAPI 加密 url 并且无法使用 mcrypt 解密,因为它返回 null
【发布时间】:2015-07-14 23:35:00
【问题描述】:

我正在尝试通过加密 URL 发送,然后在另一端对其进行解码。现在我的调用被传递了,但我的解密返回 null。

这是我的一些代码。

$this->_app_url . '?key=' . $this->_api_key . '&request=' .base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $this->_api_key, json_encode($url), MCRYPT_MODE_ECB));

url 只是一个标准的 url,key 是一个 32 位的字符串,所以你可以把它想象成任何东西。 $url 变量是一个要发送的东西的数组。因此,当我解密时,我完全拥有该数组。

所以在另一端我正在尝试解码:

$key = $_REQUEST["key"];
$encrypted = $_REQUEST["request"];

$decrypted = json_decode(rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, base64_decode($encrypted), MCRYPT_MODE_ECB)));

这只是返回NULL,我可以回显密钥和请求,我得到了我所期望的,但我无法解密它。

【问题讨论】:

  • 你检查json_last_error了吗?
  • 你能在json_decode之前试试utf8_encode吗?
  • 如果我把它放在解码之前仍然会给出同样的错误。
  • 请不要在 ECB 模式下使用MCRYPT_RIJNDAEL_256。另外,你为什么要传输密钥?
  • @ScottArciszewski 你忘了最重要的一个:SSL。既然可以加密整个交互,为什么只加密部分数据?

标签: php encryption


【解决方案1】:

这个问题被问了很多,用不同的词选择(这使得很难说,“只要搜索它!”)。这一事实促成了一篇名为 The Comprehensive Guide to URL Parameter Encryption in PHP 的博文。

人们想在这里做什么

人们应该做什么

说明

通常,人们想要 看起来随机的 URL。这不允许您有太多空间来encrypt then authenticate 要混淆的数据库记录 ID。这样做需要 32 个字节的最小 URL 长度(对于 HMAC-SHA256),以 base64 编码时为 44 个字符。

一个更简单的策略是生成一个随机字符串(请参阅random_compat 了解random_bytes() 的 PHP5 实现以及生成这些字符串的random_int())并引用该列。

如果您必须加密数据(非常不推荐),请不要使用本土设计(和don't use mcrypt either!)。使用trustworthy library instead

【讨论】:

    猜你喜欢
    • 2013-12-28
    • 2023-03-03
    • 1970-01-01
    • 2011-01-27
    • 2015-11-10
    • 1970-01-01
    • 2011-01-31
    • 2013-05-29
    • 2011-10-26
    相关资源
    最近更新 更多