标签:
URL是一种类DES的加密/解密算法 URLEncode主要是把Not ASC字符以及特殊字符
以%X / Hex处理链接后返回新的字符串、
public static string UrlEncode(string URIstring, Encoding URIEncoding) { StringBuilder str = new StringBuilder(); byte[] buf = URIEncoding.GetBytes(URIstring); for (int i = 0; i < buf.Length; i++) str.Append("%" + Convert.ToString(buf[i], 16)); return Convert.ToString(str); }
上面的代码是很多人再C#中使用的一种办法,但是它却并不是标准的UrlEncode
那么我们看看它加密出的结果与另一种加密不同之处、
已更新的定义 / Wow
上面的代码: %d2%d1%b8%fc%d0%c2%b5%c4%b6%a8%d2%e5%20%2f%20%57%6f%77
另一种代码: %d2%d1%b8%fc%d0%c2%b5%c4%b6%a8%d2%e5%20/%20Wow
很简单你在百度或谷歌内搜索词条的时候,你可以尝试上面的词条 你一定会发现
加密出的结果不会是 上面的代码 加密出的结果、那虽然用不会有太大问题 但代码
加密不标准是无法被隐藏的、不应转换的它却转换了凭白让电脑在解密时多做操作、
下面我们看看正确的URL加密代码
[DllImport("kernel32.dll", SetLastError = true)] private unsafe static extern sbyte* SetHandleCount(byte[] value); private unsafe static int strlen(sbyte* ptr) { int i = 0; while (*(ptr++) != 0) i++; return i; } private unsafe static string UrlEncode(string URIstring, Encoding URIEncoding) { string eax, str = string.Empty; sbyte* ptr = SetHandleCount(URIEncoding.GetBytes(URIstring)); for (int i = 0, len = strlen(ptr); i < len; i++, ptr++) { int asc = *ptr < 0 ? 256 + *ptr : *ptr; if (asc < 42 || asc == 43 || asc > 57 && asc < 64 || asc > 90 && asc < 95 || asc == 96 || asc > 122) { eax = Convert.ToString(asc, 16); str += eax.Length < 2 ? "%0" + eax : "%" + eax; } else str += (char)asc; } return str; }
是不是感到一下复杂了很多 但它是标准的一个URL加密方法
被多个语言采取类似、加密相同 有些URL解密代码是不支持
不标准URL加密后的字符串的虽然几率很小但不代表没有、
上面的加密大家还可以在优化一下,我只是不想定义byte[]的
变量、声明变量过多本人是很讨厌的
使用上述代码时,需要你在项目属性中打勾 允许不安全代码
否则你无法进行编译于调试,因为代码中包含本地代码部分
public static string UrlDecode(string URIstring, Encoding encoding) { ArrayList str = new ArrayList(); for (int i = 0; i < URIstring.Length; i++) { if (URIstring[i] == '%') { string eax = URIstring.Substring(++i, 2); str.Add(Convert.ToByte(eax, 16)); i++; } else str.Add(Convert.ToByte(URIstring[i])); } return encoding.GetString((byte[])str.ToArray(typeof(byte))); }
上面是URL解密方法部分、它可以支持不标准的URL加密后
的字符串 其核心主要是根据URL编码时以Not ASC字符以及
特殊字符从Hex换回字节 存放进BUF中 最终在到文本返回、
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/u012395622/article/details/47259325