Python 3.x 生成缩短url的代码/算法是什么?
我已经搜索了一段时间如何生成一个缩短的url(例如bit.ly或goo.gl的工作方式),但都没有成功 我猜想会是这样的:Python 3.x 生成缩短url的代码/算法是什么?,python-3.x,algorithm,hash,encoding,short-url,Python 3.x,Algorithm,Hash,Encoding,Short Url,我已经搜索了一段时间如何生成一个缩短的url(例如bit.ly或goo.gl的工作方式),但都没有成功 我猜想会是这样的: baseN(hash(long_url)) 但我总是以很长的摘要结束,而不是像6个字符这样的短摘要 在编码之前截断摘要是否安全(编码是否必要?我相信这是为了使其URL“安全”,但我想问一下),并且在仅处理六个字符时是否不存在冲突的可能性 它看起来像(警告:我不懂数学)6的阶乘!(例如,6*5*4*3*2*1)将只产生720个组合 我还记得在某个地方读到过这样一篇文章:用一
baseN(hash(long_url))
但我总是以很长的摘要结束,而不是像6个字符这样的短摘要
在编码之前截断摘要是否安全(编码是否必要?我相信这是为了使其URL“安全”,但我想问一下),并且在仅处理六个字符时是否不存在冲突的可能性
它看起来像(警告:我不懂数学)6的阶乘!(例如,6*5*4*3*2*1
)将只产生720个组合
我还记得在某个地方读到过这样一篇文章:用一个包含10万个项目的哈希表,粗略计算碰撞次数可以产生约17%的碰撞几率。这对我来说是一个相当大的百分比
以下Python代码基于我对如何进行这种url缩短的理解:
import hashlib, base64
message = hashlib.sha512()
message.update("https://www.python.org/dev/peps/pep-0537/")
base64.urlsafe_b64encode(
message.hexdigest().encode("utf-8")
)[:6].decode("utf-8")
没有有效的功能可以做到这一点。您需要:
您可能正在寻找中提到的双向函数 但我也建议您不要过于复杂,除非它确实是您的场景的需求 一种更简单的方法是只记录您映射的内容: 。。。没有压缩算法,但有查找和生成算法。当URL缩短器获取新URL时,它必须创建一个尚未获取的新短URL并返回此URL。然后将短URL和长URL存储在键值存储中,并在查找时使用
不,这不是阶乘。这是一个指数。6个位置中的62个不同字符,is 62^6 is 56.800.235.584可能的唯一字符串。URL缩短器不使用散列,他们使用随机数生成器和快速重复检查。当然,从这样的散列中截取任何内容都不省事。。。这就像从电话簿中的每个条目中截取姓氏和街道地址,然后仍然希望“亚当”指的是一个唯一的人…不要再考虑“随机唯一标识符”将需要暗示任何哈希。缩短某个内容,然后从缩短的版本还原原始内容将是一种压缩算法。但是,当您仍然局限于使用ASCII子集来表示压缩值时,这些对短字符串(如URL)不是非常有效