码迷,mamicode.com
首页 > Windows程序 > 详细

C# UrlEngine(加密/解密)

时间:2015-08-03 19:09:12      阅读:172      评论:0      收藏:0      [点我收藏+]

标签:

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


 


 

版权声明:本文为博主原创文章,未经博主允许不得转载。

C# UrlEngine(加密/解密)

标签:

原文地址:http://blog.csdn.net/u012395622/article/details/47259325

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!