将json数组编码为可在URL查询字符串中使用的字母数字字符串的最佳方法是什么?
我需要一些简单但不容易破解的东西。我已经阅读了所有的加密和解密文档。
我需要将json数组Eg {"firstName":"John","lastName":"Doe"}
加密到像a14iw58swd33s541dg2k58kv3s4gvkjsdf33s9f3
这样的东西,因此它可以用在像http://www.example.com/?v=a14iw58swd33s541dg2k58kv3s4gvkjsdf33s9f3
这样的url查询字符串中。
我稍后会解密这个服务器端。由于它是网址的一部分,我不能拥有ȃZ Vì§n‹ØfjÒ šçæ¹ä¯
这样做的简单而安全的方法是什么?
答案 0 :(得分:7)
base64_encode
运行二进制数据以获取仅ASCII字符串。答案 1 :(得分:2)
1)使用对称密码(例如AES)对其进行加密。您使用的密钥不应该在任何公共代码(javascript等)中看到
2)通过base64编码运行中断结果,使其只包含可打印字符。
3)为了反过来,base64解码然后使用相同的密钥和算法解密。
答案 2 :(得分:1)
为什么不使用您已经调查过的强大的PHP加密方法,只需对结果进行编码?让我们通过URL传递它而不会出现问题,但是在尝试获取使用URL友好字符集的内容时,您不会将自己锁定在特定或较弱的加密方法中。
<?php
$ciphertext = /* some encryption code here */
$url_string = urlencode( base64_encode ($ciphertext));
?>
答案 3 :(得分:1)
如果我正确地阅读了问题,解决方案应该只生成字母数字字符。 Base64不符合该要求,因为它使用2个额外字符进行编码。
如前所述,您应该首先使用任何合适的加密算法,但是您需要base62编码器和解码器。网上有一些。这是一个:https://gist.github.com/Synchro/1139429
然而,提问者的例子不包括大写字母。如果只需要小写字母,则需要base36编码。
另一方面,提问者要求提供适合网址的内容。您可以使用base64,但必须使用特殊情况,确保可以使用额外的字符。一些base64实现包括&#39; /&#39;和&#39; +&#39;作为额外的2个字符,并以&#39; =&#39;结尾。您可以将这些更改为&#39; _&#39;和&#39; - &#39;,扔掉&#39; =&#39;。请参阅此处的加密和解密函数,并注意blnBase64标志:
答案 4 :(得分:0)
注意:通过url传递数据时,限制为1024字节。因此,如果您的加密字符串被截断(即使是1个字符),它将无法正确解密。