【问题标题】:Shorter hash strings without compromising security [duplicate]在不影响安全性的情况下更短的哈希字符串 [重复]
【发布时间】:2011-11-21 00:07:32
【问题描述】:

可能重复:
php short hash

MD5 哈希值长且使用不便。如何进一步编码 md5 字符串以使用字符子集(例如 a-z、A-Z 和 0-9)生成更短的字符串? jsfiddle.net 在他们的网站上做了类似的事情来生成易于复制和粘贴的短链接,看起来像这样:http://jsfiddle.net/uY7Pk/

【问题讨论】:

  • jsfiddle 没有使用那些来实现安全性! 为了安全性,MD5 本身还不够长。除非你真的不想要 hashes,而是想要短的 unique 标识符?
  • “MD5 哈希值长且使用不便” - 不,它们不是。
  • 查看链接的副本,您正在寻找 base36 编码

标签: php encryption


【解决方案1】:
  1. 生成一个随机的 N 个字符的字符串。
  2. 查看数据库中是否有其他任何东西已经将该字符串作为其短网址。
  3. 如果是,执行1。如果不是,将该字符串作为资源的shorturl存储在数据库中。

当你有一个持久的数据存储时,不需要对 url 缩短器使用散列,因为你实际上不是 编码 长 url,你只是 associating令牌。

【讨论】:

  • 实际上,url 缩短器通常是以 base 62 编码的数字标识符(不是拼写错误),而不是随机生成的。
  • 取决于 URL 缩短器是否关心隐私。如果数字标识符是有序的,并且有人设法反转编码,他们可以检查他们想要的任何其他项目。如果数字标识符是随机的,那么生成它们并对其进行编码只是“生成随机 N 字符串”的另一种方式。
  • 性能方面,对数字标识符进行编码效率更高。无论如何,您可以在大多数网址缩短器上检查您想要的任何项目,所以我看不出它与隐私有什么关系。
  • 性能方面,这并不重要 - 如果您想快速查找内容,您始终可以在 shorturl 列上使用数据库索引。 “大多数 URL 缩短器”?几乎不。许多明确旨在缩短 URL 的站点允许您浏览已缩短的内容,但也有许多具有内置短 URL 的站点(例如:pastebin.com)提供“私人”选项未公开列出或连续的短网址。
  • 短网址的生成不一定是许多网站关注效率的地方。但同时获得两者的好处也很容易:生成短网址的两个独立部分;其中一个是随机字符串,另一个是编码的递增数字。第一部分消除猜测能力,第二部分确保不冲突。
【解决方案2】:

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

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

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

...可能有算法可以稍微进一步压缩这些哈希,但它们肯定会产生二进制 blob - 这不是特定的字符子集,例如 az、AZ 和 0-9。

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

【讨论】:

    【解决方案3】:

    我认为您对加密和 URL 缩短感到困惑。

    您在 JSfiddle 上看到的不是加密,它是引用页面的唯一 id。他们不仅使用数字 ID,还使用字母,这允许相同数量的字符进行更多组合。

    【讨论】:

      【解决方案4】:

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

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

      但这取决于你之后是否需要恢复你的拥有。

      【讨论】:

      • 来自manualBase64 编码的数据比原始数据多占用大约 33% 的空间。
      • 我只需要在数据库中存储一个安全的唯一令牌,我可以方便地发送给用户。
      • -1:base64 编码当然总是比原来的长。如果您对 hash 进行编码,您将无法恢复数据。
      • echo base64_encode(md5('hello')) 结果是 NWQ0MTQwMmFiYzRiMmE3NmI5NzE5ZDkxMTAxN2M1OTI=,这是不好的
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-02-16
      • 2021-04-25
      • 1970-01-01
      • 2011-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多