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

PHP加密为字母数字字符串,解密为原始字符串,以便在URL中使用,php,encryption,Php,Encryption,将json数组编码为可用于URL查询字符串的字母数字字符串的最佳方法是什么 我需要的东西是简单的,但不容易破解。我已经通读了所有的加密和解密文档 我需要将一个json数组(例如:{“firstName”:“John”,“lastName”:“Doe”}加密为类似a14iw58swd33s541dg2k58kv3s4gvkjsdf33s9f3)的内容,这样就可以在http://www.example.com/?v=a14iw58swd33s541dg2k58kv3s4gvkjsdf33s9f3 稍

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

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

我需要将一个json数组(例如:
{“firstName”:“John”,“lastName”:“Doe”}
加密为类似
a14iw58swd33s541dg2k58kv3s4gvkjsdf33s9f3
)的内容,这样就可以在
http://www.example.com/?v=a14iw58swd33s541dg2k58kv3s4gvkjsdf33s9f3

稍后我将解密这个服务器端。因为它是URL的一部分,所以我不能有类似于
ȃZ Vì§nèØfjÒšæä

做这件事的简单和安全的方法是什么

  • 使用您认为合适的任何加密函数进行加密,该函数将生成二进制数据
  • 通过运行二进制数据获取仅ASCII字符串
  • 利润
  • 颠倒上述步骤
  • 1) 使用对称密码对其进行加密,例如AES。在任何公共代码(javascript等)中都不可能看到它所使用的密钥

    2) 通过base64编码运行加密结果,使其仅包含可打印字符


    3) 相反,base64解码,然后使用相同的密钥和算法进行解密。

    为什么不使用强大的PHP加密方法,就像您已经研究过的那样,并简单地对结果进行编码?让我们通过URL毫无问题地传递它,但在尝试获取使用URL友好字符集的内容时,不会将自己锁定在特定或较弱的加密方法中

    <?php
    $ciphertext = /* some encryption code here */
    
    $url_string = urlencode( base64_encode ($ciphertext));
    ?>
    
    
    
    注意:通过url传递数据时,限制为1024字节。因此,如果您的加密字符串被截断(甚至被1个字符截断),它将无法正确解密。

    如果我正确理解了这个问题,解决方案将只产生字母数字字符。Base64不符合该要求,因为它使用2个额外字符进行编码

    如前所述,您应该首先使用任何合适的加密算法,然后需要base62编码器和解码器。网上有一些。这里有一个:

    然而,提问者的例子不包括大写字母。如果只需要小写字母,则需要base36编码

    另一方面,提问者询问什么适合URL。可以使用base64,但必须使用特殊大小写,确保可以使用额外的字符。一些base64实现包括“/”和“+”作为额外的2个字符,并以“=”结尾。您可以将它们更改为''.'和'-',然后扔掉'='。请参见此处的加密和解密函数,并注意blnBase64标志:


    无论生成什么加密字符串,在用于URL@Phil如果是字母数字,是否需要编码?数据是否真的需要存储在URL中?如果你想保守秘密,最好将它存储在服务器上,并使用令牌(可以在URL中,如果不需要传递,也可以在会话中)。@Phil,我个人会说,但是是的,URL包装器是个好主意。