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中 最终在到文本返回、