using System;
using System.Web.Security;
using System.IO;
using System.Text;
using System.Security.Cryptography;
namespace Encrypt
{
/// <summary>
/// Description of MD5Encrypt.MD5加密不可逆转
/// </summary>
public class MD5Encrypt
{
public MD5Encrypt()
{
}
/// <summary>
/// 方法一:通过使用 new 运算符创建对象
/// </summary>
/// <param name="strSource">需要加密的明文</param>
/// <returns>返回32位加密结果,该结果取32位加密结果的第9位到25位</returns>
public String GetMD5Method1(String strSource)
{
//new
System.Security.Cryptography.MD5 md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();
//获取密文字节数组
byte[] bytResult = md5.ComputeHash(System.Text.Encoding.Default.GetBytes(strSource));
//转换成字符串,并取9到25位
//String strResult = BitConverter.ToString(bytResult, 8, 16);
//转换为字符串,并取32位结果
String strResult=BitConverter.ToString(bytResult);
//转换成字符串,32位
//String strResult = BitConverter.ToString(bytResult);
//BitConverter转换出来的字符串会在每个字符中间产生一个分隔符,需要去除掉
strResult = strResult.Replace("-", "");
return strResult;
}
/// <summary>
/// 方法二:通过调用特定加密算法的抽象类上的 Create 方法,创建实现特定加密算法的对象。
/// </summary>
/// <param name="strSource">需要加密的明文</param>
/// <returns>返回32位加密结果</returns>
public String GetMD5Method2(String strSource)
{
String strResult = "";
//Create
System.Security.Cryptography.MD5 md5 = System.Security.Cryptography.MD5.Create();
//注意编码UTF8、UTF7、Unicode等的选择,一般用UTF8
byte[] bytResult = md5.ComputeHash(System.Text.Encoding.UTF8.GetBytes(strSource));
//字节类型的数组转换为字符串
for (int i = 0; i < bytResult.Length; i++)
{
//16进制转换
strResult = strResult + bytResult[i].ToString("X");
}
return strResult;
}
/// <summary>
/// 方法三:直接使用HashPasswordForStoringInConfigFile生成
/// </summary>
/// <param name="strSource">需要加密的明文</param>
/// <returns>返回32位加密结果</returns>
public String GetMD5Method3(String strSource)
{
return System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(strSource, "MD5");
}
}
}