短网址的3种算法:进制算法随机数算法和HASH算法

Posted 业余草

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了短网址的3种算法:进制算法随机数算法和HASH算法相关的知识,希望对你有一定的参考价值。

短网址,或者说短域名。顾名思义,就是把长的 URL 转成短的 URL, 现在提供这种服务的有很多公司。比如百度的,新浪的,谷歌的等。

短网址的解析过程

文字已经解释的很明白了!看不明白的看下图:

明白了短网址的解析过程后,我们来说短网址的实现算法。

根据 GitHub 上 star 数量最多的十个短网址服务对应的算法,大致分为三类:进制算法、随机数算法和HASH算法。 下面我们分别说说它们的实现原理!

短网址进制算法

算法简述:一个以数字、大小写字母共62个字符的任意进制的算法。 

数据库中ID递增,当ID为233,则对应短网址计算过程如下:

  1. 设置序列为“0123456789abcdefghijklmnopqrstuvwxyz” 

  2. 233/36=6 

  3. 233%36= 17 

  4. 依次取上述字符的6位,17位,则为6h 

其生成之后的短网址为xx.xx/6h 。

短网址随机数算法

算法简述:每次对候选字符进行任意次随机位数选择,拼接之后检查是否重复 

  1. 设置字符序列“0123456789abcdefghijklmnopqrstuvwxyz” 

  2. 根据字符个数设置最大值为35,最小值为0,取2次随机数假设为:6,17 

  3. 依次取上述字符的6位和17位,则为6h 

其生成之后的短网址为xx.xx/6h 。

短网址HASH算法

算法简述:对id进行hash操作( 可选:利用随机数进行加盐),并检查是否重复 

  1. 取随机数为盐 

  2. 对233进行sha1加密为: aaccb8bb2b4c442a7c16a9b209c9ff448c6c5f35:2 

  3. 要求位数为7,直接取上述加密结果的前7位为:aaccb8 

其生成之后的短网址为xx.xx/2e8c027 。

短网址的本质

短网址本质上是实现了一个映射函数 f: X -> Y 。而这个映射函数必须同时具有两个特点:

  1. 如果 x1 != x2, 则 f (x1) != f(x2);

  2. 对于每一个 y, 能够找到唯一的一个 x 使得 f(x) = y;

对于任何的线性函数,比如 f(x) = 2x,都满足这样的条件。

java 实现短网址

根据上面的解释,下面我来实现一个简单的短网址算法!

短网址重定向

关于短网址的重定向,我建议使用302。不建议使用301。因为302方便统计和分析用户属性等数据。大家可以参考百度、新浪、谷歌等是否都使用的是302状态!

最后提醒大家一下,实现短网址一定要注意安全问题。比如,短网址常见的SSRF安全问题、XSS、SQL注入等问题。

以上是关于短网址的3种算法:进制算法随机数算法和HASH算法的主要内容,如果未能解决你的问题,请参考以下文章

一文详解密码学中的Hash 算法

短网址算法

哈希算法从原理到实战

C#如何实现url短地址?C#短网址压缩算法与短网址原理入门

短网址服务(TinyURL)生成算法

区块链技术-hash算法