我正在使用此代码:
$url = "http://www.webtoolkit.info/javascript-base64.html";
print base64_encode($url);
但结果很长:“aHR0cDovL3d3dy53ZWJ0b29sa2l0LmluZm8vamF2YXNjcmlwdC1iYXNlNjQuaHRtbA ==”
有一种方法可以将长字符串转换为短加密并且能够转换吗?
例如:
new_encrypt("http://www.webtoolkit.info/javascript-base64.html")
Result: "431ASDFafk2"
答案 0 :(得分:3)
编码不加密。如果您依赖于此安全性,那么您将来会遭受非常严重的冲击。
Base 64编码用于将8位宽的数据转换为可以通过使用6或7位而不丢失数据的通信信道发送的格式。由于6位小于8位,编码的字符串显然会比原始字符串长。
答案 1 :(得分:1)
这个q / a可能有你想要的东西: An efficient compression algorithm for short text strings
它实际上链接在这里: http://github.com/antirez/smaz/tree/master
我没有测试它,只是找到了链接。
答案 2 :(得分:0)
首先,base64是一种编码标准,它不是为了加密数据,所以不要使用它。你的数据如此长的原因是输入字符串中的每6位,base64将输出8位。
没有任何形式的加密会直接输出缩短的字符串。在最好的情况下,结果将同样长。
该问题的解决方案是对您的字符串进行gzip然后对其进行加密,但是使用您的URL,zip格式的添加数据仍将最终使您的输出比输入更长。
答案 3 :(得分:0)
有许多不同的加密/解密算法。您可以查看以下文档:http://www.php.net/manual/en/function.mcrypt-list-algorithms.php(这使用不同算法的mcrypt)。
...但是,你不能强迫某些东西变得非常小(取决于你想要的尺寸)。加密的字符串需要具有可用于解密它的所有信息。无论如何,base64字符串不是那么长(例如与真正安全的盐渍哈希相比)。
我没有看到问题。
答案 4 :(得分:0)
嗯......您可以尝试使用md5()
或uniqid()
。
第一个生成字符串的md5哈希值。
md5("http://www.webtoolkit.info/javascript-base64.html");
http://php.net/manual/en/function.md5.php
第二个生成13个唯一ID,然后您可以在字符串和该ID之间创建关系。
http://php.net/manual/en/function.uniqid.php
P.S。我不确定你想要达到的目标,但这些解决方案可能会让你满意。
答案 5 :(得分:0)
你可以有创意,只做一些事情'加密网址,以便它不容易,但编码/解码能够..
像反向字符串...
或者有一个随机的3个字母,你的字符串用base64编码或只是替换字母的数字或数字字母,然后再用3个随机字母..一旦你知道了食谱,就可以做并撤消它。
$keychars = "abcdefghijklmnopqrstuvwxyz0123456789";
$length = 2;
$randkey = "";
$randkey2 = "";
for ($i=0;$i<$length;$i++) $randkey .= substr($keychars, rand(1, strlen($keychars) ), 1);