public sealed class Md5Encrypt
{
/// <summary>
/// 返回加密后的MD5字符串
/// </summary>
/// <param name="txtVal">要加密的字符串</param>
/// <returns>加密后的字符串</returns>
public static string Encrypt(string txtVal, string keyVal)
{
MD5CryptoServiceProvider md5Hasher = new MD5CryptoServiceProvider();
byte[] data = md5Hasher.ComputeHash(Encoding.Default.GetBytes(string.Format("{0}{1}", txtVal, keyVal)));
return BytesToHexStr(data);// sBuilder.ToString();
}
/// <summary>
/// 通过指定的 Encoding 加密
/// </summary>
/// <param name="txtVal"></param>
/// <param name="encode"></param>
/// <returns></returns>
public static string Encrypt(string txtVal, Encoding encode)
{
MD5CryptoServiceProvider md5Hasher = new MD5CryptoServiceProvider();
byte[] data = md5Hasher.ComputeHash(encode.GetBytes(txtVal));
return BytesToHexStr(data);
}
/// <summary>
/// 字节数组转16进制字符串,不带校验功能
/// </summary>
/// <param name="data">要转换的字节数组</param>
/// <returns>转换后的16进制字符串</returns>
public static string BytesToHexStr(byte[] data)
{
char[] lookup = new char[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
int i = 0, p = 0, l = data.Length;
char[] c = new char[l * 2];
byte d;
while (i < l)
{
d = data[i++];
c[p++] = lookup[d / 0x10];
c[p++] = lookup[d % 0x10];
}
return new string(c, 0, c.Length);
}
/// <summary>
/// 16进制字符串转字节数组,不带校验功能
/// </summary>
/// <param name="str">要转换的16进制字符串</param>
/// <returns>转换后的字节数组</returns>
public static byte[] HexStrToBytes(string str)
{
byte[] b = new byte[str.Length / 2];
byte c1, c2;
for (int y = 0, x = 0; x < str.Length; ++y, ++x)
{
c1 = (byte)str[x];
if (c1 > 0x60) c1 -= 0x57;
else if (c1 > 0x40) c1 -= 0x37;
else c1 -= 0x30;
c2 = (byte)str[++x];
if (c2 > 0x60) c2 -= 0x57;
else if (c2 > 0x40) c2 -= 0x37;
else c2 -= 0x30;
b[y] = (byte)((c1 << 4) + c2);
}
return b;
}
}
c# MD5加密
于 2023-06-13 15:15:37 首次发布