我怀疑这是否是加密,但是找不到更好的短语。 我需要像这样传递一个长查询字符串:
http://test.com/test.php?key=[some_very_loooooooooooooooooooooooong_query_string]
查询字符串不包含任何敏感信息,因此在这种情况下我并不真正担心安全性。只是…好,太长且太丑陋。是否有一个库函数可以让我将查询字符串编码/加密/压缩为类似于md5()的结果(类似于,总是32个字符串),但是可以解码/解密/解压缩?
基本前提是非常困难的。在URL中传输任何值意味着您只能使用ASCII字符的子集。使用任何形式的压缩gzcompress都会减小字符串的大小,但会导致二进制斑点。但是,该二进制blob无法在URL中传输,因为它将产生无效字符。要使用ASCII子集传输该二进制Blob,您需要以某种方式对其进行编码,然后将其转换为ASCII字符。
gzcompress
因此,您需要将ASCII字符转换为其他字符,然后再转换为ASCII字符。
但是实际上,大多数时候,您开始使用的ASCII字符已经是最佳长度。这里是一个快速测试:
$str = 'Hello I am a very very very very long search string'; echo $str . "\n"; echo base64_encode(gzcompress($str, 9)) . "\n"; echo bin2hex(gzcompress($str, 9)) . "\n"; echo urlencode(gzcompress($str, 9)) . "\n"; Hello I am a very very very very long search string eNrzSM3JyVfwVEjMVUhUKEstqkQncvLz0hWKUxOLkjMUikuKMvPSAc+AEoI= 78daf348cdc9c957f05448cc554854284b2daa442772f2f3d2158a53138b9233148a4b8a32f3d201cf801282 x%DA%F3H%CD%C9%C9W%F0TH%CCUHT%28K-%AAD%27r%F2%F3%D2%15%8AS%13%8B%923%14%8AK%8A2%F3%D2%01%CF%80%12%82
如您所见,原始字符串最短。在编码的压缩中,base64最短,因为它使用最大的字母表示二进制数据。它仍然比原始的更长。
对于某些非常特殊的字符组合以及一些非常特定的压缩算法(可以将其压缩为ASCII可表示的数据),有可能实现某种压缩,但这是理论上的。 更新: 实际上,这听起来太消极了。问题是您需要弄清楚压缩是否适合您的用例。不同的数据压缩方式不同,不同的编码算法工作方式也不同。同样,较长的琴弦可能会实现更好的压缩率。可以达到某种压缩效果的地方可能是一个不错的地方。您需要确定大部分时间是否处于最佳状态。
md5之类的东西不合适,因为md5是一个 hash ,这意味着它是不可逆的。您无法从中获取原始值。
恐怕您只能通过POST发送该参数,如果该参数在URL中不起作用。