1using System;
2using System.Collections.Generic;
3using System.Text;
4using System.Security.Cryptography;
5
6namespace md5
7{
8    class Program
9    {
10        static void Main(string[] args)
11        {
12             Console.WriteLine(UserMd5("8"));
13             Console.WriteLine(GetMd5Str("8"));
14         }
15       
16        ///
17        /// MD5 16位加密
18        ///
19        ///
20        ///
21
22        public static string GetMd5Str(string ConvertString)
23        {
24             MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
25            string t2 = BitConverter.ToString(md5.ComputeHash(UTF8Encoding.Default.GetBytes(ConvertString)), 4, 8);
26             t2 = t2.Replace("-", "");
27            return t2;
28         }
29       
30        ///
31        /// MD5 32位加密
32        ///
33        ///
34        ///
35        static string UserMd5(string str)
36        {
37            string cl = str;
38            string pwd = "";
39             MD5 md5 = MD5.Create();//实例化一个md5对像
40            // 加密后是一个字节类型的数组,这里要注意编码UTF8/Unicode等的选择 
41            byte[] s = md5.ComputeHash(Encoding.UTF8.GetBytes(cl));
42            // 通过使用循环,将字节类型的数组转换为字符串,此字符串是常规字符格式化所得
43            for (int i = 0; i < s.Length; i++)
44            {
45                // 将得到的字符串使用十六进制类型格式。格式后的字符是小写的字母,如果使用大写(X)则格式后的字符是大写字符
46                 pwd = pwd + s[i].ToString("X");
47
48             }
49            return pwd;
50         }
51     }
52}


方法二:

         ///
        /// 对某一字符md5加密
        ///
        ///
        /// 16与32位加密
        ///
        public static string MD5_Encrypt(string str, int code)
        {
            if (code == 16) //16位MD5加密(取32位加密的9~25字符)
            {
                return FormsAuthentication.HashPasswordForStoringInConfigFile(str, "MD5").ToLower().Substring(8, 16);
            }
            if (code == 32)
            {
                return FormsAuthentication.HashPasswordForStoringInConfigFile(str, "MD5").ToLower();
            }
            return str;
        }

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

 

最近在搞一个C#的MD5加密,个人了解由于在ASP.Net中引用System.Web.Security就可以使用里面的一个简单的MD5加密,但是,现在我想做的是,直接使用System.Security这一个安全模块。在查阅了MSDN的说明后,发现有二种的正常的方法:

using System;
using System.Security;
using System.Security.Cryptography;
using System.Text;

然后,

    MD5CryptoServiceProvider md5=new MD5CryptoServiceProvider();
    string t2=BitConverter.ToString(md5.ComputeHash(UTF8Encoding.Default.GetBytes(sinText)));
    t2=t2.Replace("-","");
    soutText=t2;
    return t2;

以上会产生一个16位的加密MD5数组,转换成字符串后长度是32,但是,由于我们现在的ASP代码中的MD5加密一般是16长度的,所以,可以使用下面的方法:

    MD5CryptoServiceProvider md5=new MD5CryptoServiceProvider();
    string t2=BitConverter.ToString(md5.ComputeHash(UTF8Encoding.Default.GetBytes(sinText)),4,8);
    t2=t2.Replace("-","");
    soutText=t2;
    return t2;

以上使用的是 System.Text.BinConverter来转换数组到字符串,一开始我直接使用UTF8Encoding.Default.GetString(b),却常常得不到正常的值。可能那个有一些问题吧。

如果大家不想使用上面的 BitConverter,那么,你还可以使用以下的方法:

StringBuilder sb=new StringBuilder();
for(int i=0;i
{
    sb.Append(b[i].ToString("x2");
}
return sb.ToString();

以上也可以达到将加密后的数据转化成正常的字符串,这个是英文MSDN中的用法

arrow
arrow
    全站熱搜

    戮克 發表在 痞客邦 留言(0) 人氣()