PHP加密到字母数字字符串并解密为原始字符串以在URL中使用

时间:2013-04-29 05:29:16

标签: php encryption

将json数组编码为可在URL查询字符串中使用的字母数字字符串的最佳方法是什么?

我需要一些简单但不容易破解的东西。我已经阅读了所有的加密和解密文档。

我需要将json数组Eg {"firstName":"John","lastName":"Doe"}加密到像a14iw58swd33s541dg2k58kv3s4gvkjsdf33s9f3这样的东西,因此它可以用在像http://www.example.com/?v=a14iw58swd33s541dg2k58kv3s4gvkjsdf33s9f3这样的url查询字符串中。

我稍后会解密这个服务器端。由于它是网址的一部分,我不能拥有ȃZ Vì§n‹ØfjÒ šçæ¹ä¯

之类的内容

这样做的简单而安全的方法是什么?

5 个答案:

答案 0 :(得分:7)

  1. 使用您认为合适的任何加密函数进行加密,这将生成二进制数据。
  2. 通过base64_encode运行二进制数据以获取仅ASCII字符串。
  3. ???
  4. 利润!
  5. 颠倒以上步骤。

答案 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标志:

https://github.com/qcubed/framework/blob/master/includes/qcubed/_core/framework/QCryptography.class.php#L116

答案 4 :(得分:0)

注意:通过url传递数据时,限制为1024字节。因此,如果您的加密字符串被截断(即使是1个字符),它将无法正确解密。