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中的用法
留言列表