短链生成

 1  /// <summary>
 2  /// 短链生成
 3  /// </summary>
 4  public class ShortUrlBuilder
 5         {
 6             private static readonly string[] Chars =
 7             { "a" , "b" , "c" , "d" , "e" , "f" , "g" , "h" ,
 8
 9             "i" , "j" , "k" , "l" , "m" , "n" , "o" , "p" , "q" , "r" , "s" , "t" ,
10
11             "u" , "v" , "w" , "x" , "y" , "z" , "0" , "1" , "2" , "3" , "4" , "5" ,
12
13             "6" , "7" , "8" , "9" , "A" , "B" , "C" , "D" , "E" , "F" , "G" , "H" ,
14
15             "I" , "J" , "K" , "L" , "M" , "N" , "O" , "P" , "Q" , "R" , "S" , "T" ,
16
17             "U" , "V" , "W" , "X" , "Y" , "Z"
18             };
19
20             /// <summary>
21             /// 生成指定URL的摘要
22             /// </summary>
23             /// <param name="url">URL</param>
24             /// <returns>短链列表,任取一个存储就行。</returns>
25             public static List<string> Build(string url)
26             {
27                 var shortUrls = new List<string>();
28                 if (url == null)
29                 {
30                     return shortUrls;
31                 }
32                 var hash = GetMd5(url);
33                 //将32个字符的md5码分成4段处理,每段8个字符
34                 for (int i = 0; i < 4; i++)
35                 {
36
37                     int offset = i * 8;
38
39                     string sub = hash.Substring(offset,   8);
40
41                     long sub16 = long.Parse(sub, NumberStyles.HexNumber); //将sub当作一个16进制的数,转成long
42
43                     // & 0X3FFFFFFF,去掉最前面的2位,只留下30位
44                     sub16 &= 0X3FFFFFFF;
45
46                     StringBuilder sb = new StringBuilder();
47                     //将剩下的30位分6段处理,每段5位
48                     for (int j = 0; j < 6; j++)
49                     {
50                         //得到一个 <= 61的数字
51                         long t = sub16 & 0x0000003D;
52                         sb.Append(Chars[(int)t]);
53
54                         sub16 >>= 5;  //将sub16右移5位
55                     }
56
57                     shortUrls.Add(sb.ToString());
58                 }
59                 return shortUrls;
60             }
61
62             /// <summary>
63             /// MD5加密
64             /// </summary>
65             /// <param name="myString">原始字符串</param>
66             /// <param name="salt">盐</param>
67             /// <returns></returns>
68             private static string GetMd5(string myString, string salt = "")
69             {
70                 if (myString != null)
71                 {
72                     var array = myString.ToCharArray();
73                     Array.Reverse(array);
74                     myString = $"{new string(array)}+{{{salt}}}";
75
76 #if DEBUG
77                     Debugger.Log(1, "2", $"自定义消息:{myString}\r\n");
78 #endif
79                     MD5 md5 = MD5.Create();
80                     byte[] bs = Encoding.UTF8.GetBytes(myString);
81                     byte[] hs = md5.ComputeHash(bs);
82                     StringBuilder sb = new StringBuilder();
83                     foreach (byte b in hs)
84                     {
85                         // 以十六进制格式格式化
86                         sb.Append(b.ToString("x2"));
87                     }
88                     return sb.ToString();
89
90                 }
91                 return null;
92             }
93         }
时间: 2024-10-15 18:11:49

短链生成的相关文章

链接生成接口

链接生成接口 近日公司需要用到短链接,遂想是否可以找个现成的生成接口来用,于是乎就去摆渡,目前有百度家的短链接和新浪家的短链接,不巧的是百度家的短链竟然不支持我们这个长链接的生成,难道是因为传入的长链接参数是一个guid数字太长的原因?反正搞不懂为啥这么坑爹,没办法只能用新浪喽.尼玛查看了接口介绍才发现不能愉快的玩耍了.我只是想生成个短链而已,为啥这么坑爹要求登录还传入各种参数?继续摆渡看了第三方封装的,发现至少都要登陆,就没有一个简单共别人使用的,这里就想问下那些提供商就不能秉承共享精神,免费

蘑菇街 App 的组件化之路

在组件化之前,蘑菇街 App 的代码都是在一个工程里开发的,在人比较少,业务发展不是很快的时候,这样是比较合适的,能一定程度地保证开发效率. 慢慢地代码量多了起来,开发人员也多了起来,业务发展也快了起来,这时单一工程开发模式就会显露出一些弊端 耦合比较严重(因为没有明确的约束,「组件」间引用的现象会比较多) 容易出现冲突(尤其是使用 Xib,还有就是 Xcode Project,虽说有 脚本 可以改善) 业务方的开发效率不够高(只关心自己的组件,却要编译整个项目,与其他不相干的代码糅合在一起)

URL重定向漏洞,python打造URL重定向漏洞检测脚本

前言: 今天学习了重定向漏洞,这个漏洞比较好理解 漏洞名:URL重定向漏洞 威胁:低 漏洞的来源:开发者对head头做好对应的过滤和限制 例子: 有漏洞的网站:http://a.com/x.php?url=http://a.com/login.php 这时我们通过写个url后面的链接让其跳转到指定的页面.例:http;//a.com/x.php?url=http://www.baidu.com 可搭配使用的漏洞: CSRF  当一个网站存在CSRF漏洞的时候,而你知道了创建后台管理员的链接.修改

如何实现一个短链接服务

短链接,通俗来说,就是将长的URL网址,通过程序计算等方式,转换为简短的网址字符串. 大家经常会收到一些莫名的营销短信,里面有一个非常短的链接让你跳转.新浪微博因为限制字数,所以也会经常见到这种看着不像网址的网址.短链的兴起应该就是微博限制字数激起了大家的创造力. 如果创建一个短链系统,我们应该做什么呢? 将长链接变为短链: 用户访问短链接,会跳转到正确的长链接上去. 查找到对应的长网址,并跳转到对应的页面. 短链生成方法 短码一般是由 [a - z, A - Z, 0 - 9] 这62 个字母

长网址生成短链接生成器源码分享

短网址(Short URL) ,顾名思义就是在形式上比较短的网址.通常用的是asp或者php转向,在Web 2.0的今天,不得不说,这是一个潮流.目前已经有许多类似服务,借助短网址您可以用简短的网址替代原来冗长的网址,让使用者可以更容易的分享链接. 下面小编就为大家推荐下市场上主流短网址生成服务应用: 1.酷牛短链接     http://knurl.cn 酷牛短链接是一款新浪短网址(t.cn)和腾讯短链接(url.cn)的在线生成工具,将长链接转换成t.cn和url.cn格式的短链接. 2.雷

http://t.cn/xxx的短链接如何生成?(附15款新浪短链接生成器)

短链接已经广泛应用于各种场景,电商,微信,短信等等.那么今天给大家推荐15款t.cn.url.cn的短链接短网址在线生成工具,都是我从市面数十款短链接短网址生成工具里面挑选的最为简便,最为稳定的短链接短网址生成工具.废话不多! 1,青梅短网址 网站链接:http://qingmeidwz.cn 青梅短网址是发展的比较成熟的一款在线短网址短链接生成工具,一直是本着“简 单,高效,自由,稳定”的理念.不管是同行业还是用户的口中都有着非常好的口碑. 青梅短网址最大的优点就和他们所倡导的理念一样:“简单

【异常】微博生成短链异常{&quot;request&quot;:&quot;/2/short_url/shorten.json&quot;,&quot;error_code&quot;:&quot;10014&quot;,&quot;error&quot;:&quot;Insufficient app permissions!&quot;}

一.之前的调用方式 这种方式用了大约有一年时间,之前没有问题,但是2019-8-28号突然不行了,可能是由于微博对该接口的调用做了限制.不允许通过传递source参数的方式进行请求 该接口微博API文档 /** * source去新浪微博申请App Key * @param long_url * @return */ @Deprecated public static String getShortUrl2(String long_url) { String result = HttpUtils

短URL代码也可利用百度API生成

案例:客户签收后,系统会回复一条短信给客户及一个点评服务的链接,由于链接过长,短信会自动截断,所以使用短链的方式发送. 代码如下: public string GetTinyUrl(string strLongUrl)    {        try        {            byte[] postData = Encoding.UTF8.GetBytes("url=" + strLongUrl);            var url = "http://dw

短链(ShortURL)的Java实现

什么叫短链或短址? 顾名思义,就是把长的 URL 转成短的 URL, 现在提供这种服务的有很多公司,我们以google家的 URL shortener 服务: http://goo.gl/ 为例. 首先我们到http://goo.gl/,然后把本文博客的地址http://blog.csdn.net/beiyeqingteng 输入进去,最后它会返回一个更短的URL,http://goo.gl/Jfs6q . 新浪微博为什么使用短链? 无论多长的微博,都能够转成固定长短的短链,防止某些连接太长影响