首先有一个枚举用来判断用什么那种MD5加密
/// <summary>
/// MD5 加密位数
/// </summary>
public enum MD5_Type
{
/// <summary>
/// 32位MD5算法
/// </summary>
MD5_32BIT,
/// <summary>
/// 64位MD5算法
/// </summary>
MD5_64BIT
}
这里是MD5加密算法
/// <summary>
/// 加解密工具包
/// </summary>
public sealed class MD5_Cryptography
{
private const int BITS_TO_A_BYTE = 8;
private const int BYTES_TO_A_WORD = 4;
private const int BITS_TO_A_WORD = 32;
private static long[] m_lOnBits = new long[30 + 1];
private static long[] m_l2Power = new long[30 + 1];
#region --- MD5 标准加密 32Bit加密 64Bit加密 Begin ---
/// <summary>
/// 标准MD5加密
/// <para>应用于密码相关加密</para>
/// </summary>
/// <param name="str">需要加密的字符串</param>
/// <returns>返回加密后的字符串</returns>
/// <example>
/// <code>
///
/// </code>
/// </example>
public static string MD5Encrypt(string str)
{
MD5 md5 = new MD5CryptoServiceProvider();
//将字符编码为一个字节序列
byte[] data = System.Text.Encoding.Default.GetBytes(str);
//计算data字节数组的哈希值
byte[] md5data = md5.ComputeHash(data);
md5.Clear();
string temp = string.Empty;
for (int i = 0; i < md5data.Length - 1; i++)
{
temp += md5data[i].ToString("x").PadLeft(2, '0');
}
return temp;
}
/// <summary>
/// 32位 或者 64位 MD5加密
/// <para>应用于密码相关加密</para>
/// </summary>
/// <param name="str">需要加密的字符串</param>
/// <param name="type">加密类型</param>
/// <returns>返回加密后的字符串</returns>
public static string MD5Encrypt(string str, MD5_Type type)
{
string MD5 = "";
for (int i = 0; i <= 30; i++)
{
m_lOnBits[i] = Convert.ToInt64(Math.Pow(2, i + 1) - 1);
m_l2Power[i] = Convert.ToInt64(Math.Pow(2, i));
}
long[] x = null;
int k = 0;
long AA = 0;
long BB = 0;
long CC = 0;
long DD = 0;
long a = 0;
long b = 0;
long c = 0;
long d = 0;
const int S11 = 7;
const int S12 = 12;
const int S13 = 17;
const int S14 = 22;
const int S21 = 5;
const int S22 = 9;
const int S23 = 14;
const int S24 = 20;
const int S31 = 4;
const int S32 = 11;
const int S33 = 16;
const int S34 = 23;
const int S41 = 6;
const int S42 = 10;
const int S43 = 15;
const int S44 = 21;
x = convertToWordArray(str);
a = 0x67452301;
b = 0xEFCDAB89;
c = 0x98BADCFE;
d = 0x10325476;
for (k