Php API加密url和can';t使用mcrypt解密,因为它返回null

Php API加密url和can';t使用mcrypt解密,因为它返回null,php,encryption,Php,Encryption,我试图发送一个加密的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

我试图发送一个加密的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,键是一个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
,我可以回显密钥和请求,得到我期望的结果,但我无法解密它。

这个问题被问了很多次,有不同的词选择(这使得很难说“只需搜索它!”)。这一事实引发了一篇题为

人们想在这里做什么

人们应该做什么

解释 通常,人们希望短的随机URL。这不允许您对希望混淆的数据库记录ID有太多空间。这样做需要最小URL长度为32字节(对于HMAC-SHA256),在base64中编码时为44个字符

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


如果您必须加密数据(非常不推荐),请不要使用自主设计(和!)。使用a.

这个问题已经被问了很多次,用不同的词来选择(这使得很难说“只是搜索它!”)。这一事实引发了一篇题为

人们想在这里做什么

人们应该做什么

解释 通常,人们希望短的随机URL。这不允许您对希望混淆的数据库记录ID有太多空间。这样做需要最小URL长度为32字节(对于HMAC-SHA256),在base64中编码时为44个字符

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


如果您必须加密数据(非常不推荐),请不要使用自主设计(和!)。使用。

您是否检查了
json\u last\u error
?能否在
json\u decode
之前尝试
utf8\u encode
?如果我将其放在解码之前,仍然会给出相同的错误。请不要在ECB模式下使用
MCRYPT\u RIJNDAEL\u 256
。还有,你为什么要传送密钥?@ScottArciszewski你忘了最重要的一个:SSL。当你可以加密整个交互时,为什么只加密部分数据?你是否检查了
json_last_error
?你可以在
json_decode
之前尝试
utf8_encode
?如果我把它放在解码之前,仍然会给出相同的错误。请不要在ECB模式下使用
MCRYPT_RIJNDAEL_256
。还有,你为什么要传送密钥?@ScottArciszewski你忘了最重要的一个:SSL。既然可以加密整个交互,为什么只加密部分数据?