我们正在为我们的网站构建网址缩短功能。
我们现在的目标是什么:
我们使用sha1的原因是为了确保用户无法猜出当前/过去网址中的下一个网址。
我们使用base62的原因是为了使URL有效并且对用户可读。
现在,将附加到我们的域(http://www.google.com/r/jNMYchEoche67ro1k5gsCcHfDzmRis)的28个字符“short-url”有点太长,尤其是当您考虑Twitters字符限制时。
我们目前正在考虑的是将sha1减少大约20个字符,这将产生一个14个字符的短网址,但是进一步下降,我们担心我们会碰到碰撞太快。
我们还考虑过Compressing big number (or string) to small value但是这需要我们将28或14个字符的哈希分成2个部分并对这些部分进行排序,我们不知道如何从那里返回原始哈希。
有没有人知道我们能做什么?我们更喜欢一种解决方案,我们不依赖于数据库来构建URL,但如果需要DB,请记住我们仅限于Redis / MongoDB(这意味着没有自动增量整数字段)。
答案 0 :(得分:0)
我不确定我是否理解你的所有要求,但这就是我的想法......
减少sha1似乎是正确的方法。
如果您“注册”数据库中的每个短网址,您可以通过尝试在冲突中分配备用短网址来避免冲突(如果已在您的数据库中找到哈希值,则会发生冲突)。
它会像这样工作:
每次要查找散列的正确长URL时,您都必须咨询您的数据库。我想这就是你现在已经在做的事情,因为sha1是不可逆转的。
你最初应该在多大程度上削减sha1?我会尽可能地说,只要你满足你的要求,就会很难猜到下一个网址。我会说只留下5个字节的sha1(那是40位)会很难猜测..(如果你的数据库中有100万个短网址,那么它仍将是百万分之一的猜测)