在不影响安全性的情况下缩短哈希字符串


Shorter hash strings without compromising security

可能重复:
php短散列

MD5散列很长,使用起来很不方便。如何使用字符子集(例如a-z、a-z和0-9(对md5字符串进行进一步编码以生成较短的字符串?jsfiddle.net正在他们的网站上做这样的事情,以生成易于复制和粘贴的短链接,看起来像这样:http://jsfiddle.net/uY7Pk/

  1. 生成一个随机的N字符字符串
  2. 看看数据库中是否有其他字符串作为其shorturl
  3. 如果是,转到1。如果没有,则将该字符串存储为数据库中资源的shorturl

当你有一个持久的数据存储时,没有必要对url shorteners使用哈希,因为你实际上并没有编码长url,你只是将一个令牌与之关联。

JSFiddle正在使用一种算法来缩短URL,这与MD5哈希没有太大关系。

由于哈希算法通常会生成一定长度的十六进制数据。。。

echo md5("Hello World");    
-> b10a8db164e0754105b7a99be72e3fe5

可能有算法可以进一步压缩这些散列,但它们肯定会产生二进制blob——它不是特定的字符子集,例如a-z、a-z和0-9。

旁注:PHPass目前是在php中使用哈希的可靠方法。

我认为您混淆了加密和URL缩短。

你在JSfiddle上看到的不是加密,而是一个引用页面的唯一id。他们没有只使用数字ID,而是使用字母,这允许相同数量的字符进行更多的组合。

使用base64_encode($hash(。它将产生一个通常更短的编码版本。

另一种方法是计算crc32,它是一个32位整数

但这取决于你是否需要在事后恢复你的健康。