MD5Helper
/// <summary> /// 不可逆加密MD5 /// MD5全称是message-digest algorithm 5,简单的说就是单向的加密,也就是说无法根据密文推导出明文。 /// MD5主要用途: /// 1、对一段信息生成信息摘要,该摘要对该信息具有唯一性,可以作为数字签名 /// 2、用于验证文件的有效性(是否有丢失或损坏的数据) /// 3、对用户密码的加密 /// 4、在哈希函数中计算散列值 /// 由于算法的某些不可逆特征,在加密应用上有较好的安全性。通过使用MD5加密算法,输入一个任意长度的字节串, /// 都会生成一个128位的整数。所以根据这一点MD5被广泛的用作密码加密。 /// 特点: /// 不可逆加密 /// 1 防止被篡改 /// 2 防止明文存储 /// 3 防止抵赖,数字签名 /// </summary> public class MD5Helper { /// <summary> /// 直接进行md5加密 /// </summary> /// <param name="strs"></param> /// <returns></returns> public static string ToMD5(string strs) { MD5 md5 = new MD5CryptoServiceProvider(); var bytes = Encoding.Default.GetBytes(strs);//将要加密的字符串转换为字节数组 var encryptdata = md5.ComputeHash(bytes);//将字符串加密后也转换为字符数组 return Convert.ToBase64String(encryptdata);//将加密后的字节数组转换为加密字符串 } /// <summary> /// 创建哈希字符串适用于任何 MD5 哈希函数 (在任何平台) 上创建 32 个字符的十六进制格式哈希字符串 /// </summary> /// <param name="source"></param> /// <returns></returns> public static string Get32MD5One(string source) { using (MD5 md5Hash = MD5.Create()) { byte[] data = md5Hash.ComputeHash(System.Text.Encoding.UTF8.GetBytes(source)); System.Text.StringBuilder sBuilder = new System.Text.StringBuilder(); for (int i = 0; i < data.Length; i++) { sBuilder.Append(data[i].ToString("x2")); } string hash = sBuilder.ToString(); return hash.ToUpper(); } } /// <summary> /// 获取16位md5加密 /// </summary> /// <param name="source"></param> /// <returns></returns> public static string Get16MD5One(string source) { using (System.Security.Cryptography.MD5 md5Hash = System.Security.Cryptography.MD5.Create()) { byte[] data = md5Hash.ComputeHash(System.Text.Encoding.UTF8.GetBytes(source)); //转换成字符串,并取9到25位 string sBuilder = BitConverter.ToString(data, 4, 8); //BitConverter转换出来的字符串会在每个字符中间产生一个分隔符,需要去除掉 sBuilder = sBuilder.Replace("-", ""); return sBuilder.ToString().ToUpper(); } } //// <summary> /// </summary> /// <param name="strSource">需要加密的明文</param> /// <returns>返回32位加密结果,该结果取32位加密结果的第9位到25位</returns> public static string Get32MD5Two(string source) { System.Security.Cryptography.MD5 md5 = new System.Security.Cryptography.MD5CryptoServiceProvider(); //获取密文字节数组 byte[] bytResult = md5.ComputeHash(System.Text.Encoding.Default.GetBytes(source)); //转换成字符串,32位 string strResult = BitConverter.ToString(bytResult); //BitConverter转换出来的字符串会在每个字符中间产生一个分隔符,需要去除掉 strResult = strResult.Replace("-", ""); return strResult.ToUpper(); } //// <summary> /// </summary> /// <param name="strSource">需要加密的明文</param> /// <returns>返回16位加密结果,该结果取32位加密结果的第9位到25位</returns> public static string Get16MD5Two(string source) { System.Security.Cryptography.MD5 md5 = new System.Security.Cryptography.MD5CryptoServiceProvider(); //获取密文字节数组 byte[] bytResult = md5.ComputeHash(System.Text.Encoding.Default.GetBytes(source)); //转换成字符串,并取9到25位 string strResult = BitConverter.ToString(bytResult, 4, 8); //BitConverter转换出来的字符串会在每个字符中间产生一个分隔符,需要去除掉 strResult = strResult.Replace("-", ""); return strResult.ToUpper(); }
}