我正在尝试通过加密的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));
网址只是一个标准网址,密钥是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
,我可以回应键和请求,我得到了我所期待的但我无法解密它。
答案 0 :(得分:0)
这个问题被问了很多,用不同的单词选择(这使得很难说“只搜索它!”)。这个事实促使了一篇名为The Comprehensive Guide to URL Parameter Encryption in PHP 的博客文章。
通常,人们希望使用 short 随机查找的URL。这并没有太多空间来encrypt then authenticate您要混淆的数据库记录ID。这样做将要求URL的最小长度为32个字节(对于HMAC-SHA256),以base64编码时为44个字符。
一种更简单的策略是生成一个随机字符串(请参见random_compat(有关random_bytes()
的PHP5实现和random_int()
的生成这些字符串的PHP5)并引用该列。
如果必须加密数据(非常不推荐),请不要使用本地设计(和don't use mcrypt either!)。使用trustworthy library instead。