生成缩短网址的代码/算法是什么?

时间:2018-03-20 09:07:50

标签: python-3.x algorithm hash encoding short-url

我已经搜索过一段时间了解如何生成缩短的网址(例如bit.ly或goo.gl如何工作)但是没有成功。

我认为它会是这样的:

baseN(hash(long_url))

但我总是得到一个很长的摘要,而不是像6个字符那么短的东西。

在对摘要进行编码之前截断摘要是否安全(对其进行编码甚至是必要的 - 我认为这是为了使其成为URL'安全'但想要问)并且不存在冲突的可能性什么时候只处理六个字符?

似乎(警告:我不懂数学)是一个6的阶乘! (例如6*5*4*3*2*1)只会产生720种组合。

我还记得在某个地方读到一个带有100k项目的哈希表时,对碰撞次数的粗略计算可以产生约17%的碰撞几率。这对我来说感觉相当大?

以下Python代码基于我对如何进行此类网址缩短的理解:

import hashlib, base64

message = hashlib.sha512()
message.update(b"https://www.python.org/dev/peps/pep-0537/")

base64.urlsafe_b64encode(
    message.hexdigest().encode("utf-8")
)[:6].decode("utf-8")

2 个答案:

答案 0 :(得分:2)

这样做没有有效的功能。你需要:

  1. 将网址存储在数据库中
  2. 生成唯一ID(或者如果您已经拥有该网址,则重复使用该ID)

答案 1 :(得分:0)

您可能正在寻找How to code a URL shortener?

中提到的双向功能

但我也建议你不要过于复杂,除非它确实是你的场景的要求

更简单的方法是记录您已映射的内容:

  

...没有压缩算法,但有一个查找和生成算法。当URL缩短器获取新URL时,它必须创建一个尚未采用的新短URL并返回此URL。然后,它会将短URL和长URL存储在键值存储中,并在查找时使用它。

https://www.quora.com/What-are-the-http-bit-ly-and-t-co-shortening-algorithms