我已经搜索过一段时间了解如何生成缩短的网址(例如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")
答案 0 :(得分:2)
这样做没有有效的功能。你需要:
答案 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