我使用openssl_encrypt和openssl_decrypt函数来加密和解密作为查询字符串传递的id。但在某些情况下,加密的查询字符串包含' +'字符。这导致openssl_decrypt函数出现问题,我收到以下警告。
$x = openssl_encrypt ('3', 'AES-256-CBC', $password,0, $iv);
echo openssl_decrypt ($x, 'AES-256-CBC', $password,0, $iv);
警告:openssl_decrypt():无法对输入进行base64解码
如果没有其他方法可以加密数据,请告诉我这些' +'字符。另外,我想将加密ID的字符长度限制在100以下。
答案 0 :(得分:2)
有些字符必须在查询字符串中进行URL编码,因此查询字符串必须在使用前进行非编码。您可能看到的是空格字符被编码为“+”。
请参阅URL encoding - 维基百科。
HTML 5指定了使用“get”方法向Web服务器提交HTML表单的以下转换:[1]
无法转换为正确字符集的字符将替换为HTML数字字符引用[11]
答案 1 :(得分:1)
我使用openssl_encrypt和openssl_decrypt函数来加密和解密作为查询字符串传递的id。
我可以向您介绍a better idea than encrypting IDs吗?
$x = openssl_encrypt ('3', 'AES-256-CBC', $password,0, $iv); echo openssl_decrypt ($x, 'AES-256-CBC', $password,0, $iv);
两件事:
OPENSSL_RAW_DATA
或urlencode()
。答案 2 :(得分:0)
1)使用OPENSSL_RAW_DATA
2)iv(非NULL初始化向量)应该是一些字母数字
例如
$ IV = “0123456789ABCDEF”;