将openssl_encrypt加密数据作为查询字符串传递

时间:2016-01-24 21:07:24

标签: php encryption

我使用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以下。

3 个答案:

答案 0 :(得分:2)

有些字符必须在查询字符串中进行URL编码,因此查询字符串必须在使用前进行非编码。您可能看到的是空格字符被编码为“+”。

请参阅URL encoding - 维基百科

HTML 5指定了使用“get”方法向Web服务器提交HTML表单的以下转换:[1]

无法转换为正确字符集的字符将替换为HTML数字字符引用[11]

  • SPACE编码为“+”或“%20”
  • 字母(A-Z和a-z),数字(0-9)和字符'*',' - ','。'和'_'保持原样
  • 所有其他字符编码为%HH十六进制表示,其中任何非ASCII字符首先编码为UTF-8(或其他指定编码)

答案 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);

两件事:

  1. Authenticate your ciphertext
  2. 使用OPENSSL_RAW_DATAurlencode()

答案 2 :(得分:0)

1)使用OPENSSL_RAW_DATA
2)iv(非NULL初始化向量)应该是一些字母数字 例如
$ IV = “0123456789ABCDEF”;