md5的C#实现方法,自定义md5方法,完全跳过现今网络上的md5库,实现md5加密的完全安全。
md5虽然很强大,但运用不好照样可以被黑。简单数字和字母的短字符串md5的加密字符在现在的网络中一下就可以查询到,也就是可以直接解密,md5库里直接就有了。所以md5的加密还是自己定义个规则,这样更安全。
请看下面例子的“自定义MD5方法”中的“Md5EncodeMamicode”,简单的实现思路,更安全的安全方法。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Security.Cryptography;
namespace M_Class
{
/// <summary>
/// [MD5加密][mamicode.com提供]
/// </summary>
public class MD5code
{
/// <summary>
/// [构造函数]
/// </summary>
public MD5code()
{ }
/// <summary>
/// 默认加密方式
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
public static string Md5Encode(string str)
{
return Md5Encode32(str);
}
/// <summary>
/// 32位MD5算法加密
/// </summary>
/// <param name="str">需要加密的字符串</param>
/// <returns>加密后的字符串</returns>
public static string Md5Encode32(string str)
{
string password = "";
MD5 md5 = MD5.Create();
byte[] s = md5.ComputeHash(Encoding.UTF8.GetBytes(str));
foreach (byte b in s)
password += b.ToString("X2");
return password;
}
#region 自定义MD5方法
/// <summary>
/// mamicode的MD5加密法
/// </summary>
/// <param name="uid">用户ID</param>
/// <param name="MamicodePWD">需要加密的字符串</param>
/// <returns>加密后的字符串</returns>
public static string Md5EncodeMamicode(string uid, string MamicodePWD)
{
///加密规则说明:分3步
///第1步:对pwd进行一次md5加密
///第2步:拼接新字符串,用户ID+pwd+第1步加密后字符串取第5位开始的15位字符
///第3步:将第2步拼接的字符串再一次md5加密
string Secretkey1 = Md5Encode32(MamicodePWD);
string Secretkey2 = uid + Secretkey1 + Secretkey1.Substring(5, 15);
string Secretkey3 = Md5Encode32(Secretkey2);
return Secretkey3;
}
#endregion
}
}