.NET 中 C#中的MD5

using System.Text;

namespace flyy.info
{
public class MD5
{
// 格式化md5 hash 字節數組所用的格式(兩位小寫16進制數字)
private static readonly string m_strHexFormat = "x2";
private MD5() { }
/// <summary>
/// 使用當前缺省的字符編碼對字符串進行加密
/// </summary>
/// <param name="str">需要進行md5演算的字符串</param>
/// <returns>用小寫字母表示的32位16進制數字字符串</returns>
public static string md5(string str)
{
return (string)md5(str, false, Encoding.Default);
}
/// <summary>
/// 對字符串進行md5 hash計算
/// </summary>
/// <param name="str">需要進行md5演算的字符串</param>
/// <param name="raw_output">
/// false則返回經過格式化的加密字符串(等同於 string md5(string) )
/// true則返回原始的md5 hash 長度16 的 byte[] 數組
/// </param>
/// <returns>
/// byte[] 數組或者經過格式化的 string 字符串
/// </returns>
public static object md5(string str, bool raw_output)
{
return md5(str, raw_output, Encoding.Default);
}
/// <summary>
/// 對字符串進行md5 hash計算
/// </summary>
/// <param name="str">需要進行md5演算的字符串</param>
/// <param name="raw_output">
/// false則返回經過格式化的加密字符串(等同於 string md5(string) )
/// true則返回原始的md5 hash 長度16 的 byte[] 數組
/// </param>
/// <param name="charEncoder">
/// 用來指定對輸入字符串進行編解碼的 Encoding 類型,
/// 當輸入字符串中包含多字節文字(比如中文)的時候
/// 必須保證進行匹配的 md5 hash 所使用的字符編碼相同,
/// 否則計算出來的 md5 將不匹配。
/// </param>
/// <returns>
/// byte[] 數組或者經過格式化的 string 字符串
/// </returns>
public static object md5(string str, bool raw_output,
Encoding charEncoder)
{
if (!raw_output)
return md5str(str, charEncoder);
else
return md5raw(str, charEncoder);
}

/// <summary>
/// 使用當前缺省的字符編碼對字符串進行加密
/// </summary>
/// <param name="str">需要進行md5演算的字符串</param>
/// <returns>用小寫字母表示的32位16進制數字字符串</returns>
protected static string md5str(string str)
{
return md5str(str, Encoding.Default);
}
/// <summary>
/// 對字符串進行md5加密
/// </summary>
/// <param name="str">需要進行md5演算的字符串</param>
/// <param name="charEncoder">
/// 指定對輸入字符串進行編解碼的 Encoding 類型
/// </param>
/// <returns>用小寫字母表示的32位16進制數字字符串</returns>
protected static string md5str(string str, Encoding charEncoder)
{
byte[] bytesOfStr = md5raw(str, charEncoder);
int bLen = bytesOfStr.Length;
StringBuilder pwdBuilder = new StringBuilder(32);
for (int i = 0; i < bLen; i++ )
{
pwdBuilder.Append(bytesOfStr[i].ToString(m_strHexFormat));
}
return pwdBuilder.ToString();
}
/// <summary>
/// 使用當前缺省的字符編碼對字符串進行加密
/// </summary>
/// <param name="str">需要進行md5演算的字符串</param>
/// <returns>長度16 的 byte[] 數組</returns>
protected static byte[] md5raw(string str)
{
return md5raw(str, Encoding.Default);
}
/// <summary>
/// 對字符串進行md5加密
/// </summary>
/// <param name="str">需要進行md5演算的字符串</param>
/// <param name="charEncoder">
/// 指定對輸入字符串進行編解碼的 Encoding 類型
/// </param>
/// <returns>長度16 的 byte[] 數組</returns>
protected static byte[] md5raw(string str, Encoding charEncoder)
{
System.Security.Cryptography.MD5 md5 =
System.Security.Cryptography.MD5.Create();
return md5.ComputeHash(charEncoder.GetBytes(str));
}
}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章