首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >URL缩写算法

URL缩写算法
EN

Stack Overflow用户
提问于 2011-01-01 21:54:55
回答 2查看 28.4K关注 0票数 21

现在,这不是严格意义上的URL缩写,但我的目的是这样的,所以让我们这样看它。当然,缩短URL的步骤如下:

  1. 获取完整的URL
  2. 生成唯一的短字符串作为URL的密钥
  3. 将URL和密钥存储在数据库中(在这里,键值存储将是完美的匹配)

现在,关于第二点。这是我的想法:

代码语言:javascript
复制
ByteArrayOutputStream baos = new ByteArrayOutputStream();
DataOutputStream dos = new DataOutputStream(baos);
UUID uuid = UUID.randomUUID();
dos.writeLong(uuid.getMostSignificantBits());
String encoded = new String(Base64.encodeBase64(baos.toByteArray()), "ISO-8859-1");
String shortUrlKey = StringUtils.left(encoded, 6); // returns the leftmost 6 characters
// check if exists in database, repeat until it does not

这足够好了吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-01-01 22:10:19

对于我编写的一个文件上传应用程序,我也需要这个功能。在阅读了this SO article之后,我决定只使用一些随机数,并检查它们是否存在于数据库中。

所以你的方法和我做的类似。

票数 4
EN

Stack Overflow用户

发布于 2011-01-01 22:04:25

你说的URL缩写是什么意思?

有非常不同的技术。大多数网站,AFAIK,使用这种技术只是将数据库主键(可能是某种编码的)形式放在URL中的某个位置,在那里它可以被正则表达式解析,而只是用关键字来增强其余部分。

来自亚马逊的例子:http://www.amazon.de/Bauknecht-WA-PLUS-614-Waschmaschine/dp/B003V1JDU8/

您可以输入任何内容来代替产品名称,只需输入末尾的id即可。

然而,你可能想保持你的链接整洁,并检查它是否正确,并执行301转发到真实的URL,或者如果出现错误的URL,则放置一个规范的URL。

但是:

如果你想做像TinyURL这样的事情,我的回答肯定是不。

这还不够好。

嗯,这要看情况。

这不是“安全的”。猜测URL是非常容易的。更好的方法是使用像SHA-1/MD5这样的加密函数。

当谈到碰撞时,我真的不能说。GUID设计为无冲突,但您仅使用了前6个字符。我不知道它们在算法中到底代表了什么。但它肯定不是最优的。

但是,为什么不直接使用数据库自动递增主键呢?如果安全性很重要,你也一定要使用6个以上的字符。

在我做的一个项目中,我使用了这样的东西

/database-primary-key/hash-of-primary-key-with-some-token-or-client-information/

这样,我可以直接在数据库中查找主键,这是最快的方法,但也可以验证链接不是由哈希强制的蛮力找到的。在我的例子中,散列是客户端的秘密令牌和主键的SHA-1和。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4574249

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档