Php API加密url和can';t使用mcrypt解密,因为它返回null
我试图发送一个加密的URL,然后在另一端对其进行解码。现在我所做的调用被传递,但我的解密返回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
$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。既然可以加密整个交互,为什么只加密部分数据?