七牛时间戳防盗链生成csharp,c#实现
2016-06-03 16:50
1026 查看
using System; using System.Collections.Generic; using System.Linq; using System.Security.Cryptography; using System.Text; using System.Threading.Tasks; namespace timetoken { class Program { static void Main(string[] args) { sign_help(); Console.WriteLine("等待输入type"); string type = Console.ReadLine().ToString(); Console.WriteLine("等待输入key"); string key = Console.ReadLine().ToString(); Console.WriteLine("等待输入t"); UInt64 t = UInt64.Parse(Console.ReadLine().ToString()); Console.WriteLine("等待输入url"); string url = Console.ReadLine().ToString(); test(type,key,url,t); Console.ReadKey(); } public static UInt64 to_deadline(UInt64 rang) { Console.WriteLine("to_deadline----UniversalTime" + ((UInt64)(DateTime.Now.ToUniversalTime().Ticks - 621355968000000000) / 10000000 + (UInt64)rang)); return (UInt64)(DateTime.Now.ToUniversalTime().Ticks - 621355968000000000) / 10000000 + (UInt64)rang; } public static string t16(UInt64 t) { return t.ToString("x").ToLower(); } public static string sign(string key, string t, string path) { string sign_s = summd5(key, t, path); Console.WriteLine("sign----sign_s" + sign_s); string sign_part = "sign=" + sign_s + "&t=" + t; Console.WriteLine("sign----sign_part" + sign_part); return sign_part; } public static string summd5(string key, string t, string path) { MD5 md5Hash = MD5.Create(); //获取时间戳签名的byte类型数组 byte[] time_token = Encoding.UTF8.GetBytes(key + path + t); Console.WriteLine("summd5----time_token" + key + path + t); byte[] byteMd5UserPwd = md5Hash.ComputeHash(time_token); //将byte类型的Md5值转换为字符串 StringBuilder sBuilder = new StringBuilder(); // Loop through each byte of the hashed data // and format each one as a hexadecimal string. for (int i = 0; i < byteMd5UserPwd.Length; i++) { sBuilder.Append(byteMd5UserPwd[i].ToString("x2")); } ; Console.WriteLine("summd5----strMd5Pwd" + sBuilder.ToString()); //返回时间戳签名 return sBuilder.ToString(); } public static string sign_url(string key, string t, string p_url) { byte[] b = System.Text.Encoding.UTF8.GetBytes(p_url); p_url=System.Text.Encoding.UTF8.GetString(b); Console.WriteLine("sign_url----p_url" + p_url); Uri url = new Uri(p_url); Console.WriteLine("sign_url----url.LocalPath" + url.LocalPath); string sign_part = sign(key, t, url.LocalPath); Console.WriteLine("sign_url----sign_part" + sign_part); string query_part; if (url.Query !=""){ Console.WriteLine("sign_url----url.Query" + url.Query); query_part = url.Query + "&" + sign_part; } else { query_part = "?" + sign_part; } Console.WriteLine("sign_url----query_part" + query_part); return url.Scheme + "://" + url.Host + url.LocalPath + query_part; } public static void sign_help() { Console.WriteLine("time <key> <url> <t>\n"); Console.WriteLine("deadline <key> <url> <deadline>\n"); Console.WriteLine("check <key> <signed_url>\n"); } public static string sign_time(string key, string url, UInt64 rang) { UInt64 deadline = to_deadline(rang); Console.WriteLine("sign_time----deadline" + deadline); return sign_deadline(key, url, deadline); } public static string sign_deadline(string key, string url, UInt64 deadline) { string t = t16(deadline); Console.WriteLine("sign_deadline----t" + t); return sign_url(key,t,url); } public static bool sign_check(string key,string signed_url) { byte[] b = System.Text.Encoding.UTF8.GetBytes(signed_url); signed_url = System.Text.Encoding.UTF8.GetString(b); Uri url = new Uri(signed_url); string sign_s = summd5(key, subs(url.Query,"t="),url.LocalPath ); Console.WriteLine("sign_check----sign_s" + sign_s); Console.WriteLine("sign_check----subs(url.Query,‘t’)" + subs(url.Query,"t=")); Console.WriteLine("sign_check----subs(url.Query, 'sign')" + subs(url.Query, "sign=")); return (sign_s + "&t="+subs(url.Query, "t=") == subs(url.Query, "sign=")); } public static string subs(string s, string start) { int i = s.IndexOf(start) + start.Length ; int j = s.Length; return s.Substring(i, j - i); } public static void test(string type, string key, string url, UInt64 t) { if (type == "time") { Console.WriteLine( sign_time(key,url,t)); } if (type == "deadline") { Console.WriteLine( sign_deadline(key,url,t)); } if (type == "check") { Console.WriteLine(sign_check(key,url)); } } } }
相关文章推荐
- C# WPF 命令行输入
- C#/串口助手开发
- 计时器定时播放音乐
- 闲暇之余,兴趣所致
- VS 之 C# 通过console 调用 exe 程序,窗口隐藏设置
- C#获取进程的主窗口句柄
- C#中 IoC 的实现
- C#依赖注入那些事儿(二)
- C#依赖注入那些事儿(一)
- C# 异步
- C# 执行dos命令及批处理
- C#指定下标position读取文本,并返回正确position;
- c#基础语法笔记----个人学习笔记
- XML反射解析
- C#设置某类文件双击默认打开方式
- windowsphone(windows 10 mobile)开发基础笔记
- LoadResourceDll类,载入资源中的动态链接库(dll)文件,把DLL打包到EXE文件里面
- C#:Socket通信
- C#实现程序开机启动的方法
- C#实现闪动托盘图标效果的方法