【加密算法】MD5

1、簡介算法

MD5的全稱是Message-Digest Algorithm 5(信息摘要算法),在90年代初由MIT Laboratory for Computer Science和RSA Data Security Inc的Ronald L. Rivest開發出來,經MD二、MD3和MD4發展而來。網絡

消息摘要算法的主要特徵是加密過程不須要密鑰,而且通過加密的數據沒法被解密,只有輸入相同的明文數據通過相同的消息摘要算法才能獲得相同的密文。消息摘要算法不存在密鑰的管理與分發問題,適合於分佈式網絡上使用。因爲其加密計算的工做量至關可觀,因此之前的這種算法一般只用於數據量有限的狀況下的加密,例如計算機的口令就是用不可逆加密算法加密的。近年來,隨着計算機性能的飛速改善,加密速度再也不成爲限制這種加密技術發展的桎梏,於是消息摘要算法應用的領域不斷增長。分佈式

2、實現ide

/// <summary>
/// MD5加密類
/// </summary>
public class Md5Helper
{
    /// <summary>
    /// MD5加密
    /// 加權:無
    /// 位數:32位
    /// </summary>
    /// <param name="plaintext">明文</param>
    /// <returns>返回32位的密文</returns>
    public static string Encrypt(string plaintext)
    {
        return Encrypt(plaintext, true, null);
    }

    /// <summary>
    /// MD5加密
    /// 加權:有
    /// 位數:32位
    /// </summary>
    /// <param name="plaintext">明文</param>
    /// <param name="salt">隨機字符串</param>
    /// <returns>返回32位的密文</returns>
    public static string Encrypt(string plaintext, string salt)
    {
        return Encrypt(plaintext, true, salt);
    }

    /// <summary>
    /// MD5加密
    /// 加權:無
    /// 位數:32位或16位
    /// </summary>
    /// <param name="plaintext">明文</param>
    /// <param name="isThirtyTwo">是 返回32位,否返回16位</param>
    /// <returns></returns>
    public static string Encrypt(string plaintext, bool isThirtyTwo)
    {
        return Encrypt(plaintext, isThirtyTwo, null);
    }

    /// <summary>
    /// MD5加密
    /// 加權:有
    /// 位數:32位或16位
    /// </summary>
    /// <param name="plaintext"></param>
    /// <param name="isThirtyTwo"></param>
    /// <param name="salt"></param>
    /// <returns></returns>
    public static string Encrypt(string plaintext, bool isThirtyTwo, string salt)
    {
        if (String.IsNullOrEmpty(plaintext))
        {
            throw new ArgumentNullException("明文不能爲空");
        }

        if (!String.IsNullOrEmpty(salt))
        {
            plaintext = plaintext + salt; //加權是爲了增長密文的複雜性。 這裏的加權位置可按照本身的須要任意調整
        }

        MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
        byte[] bytResult = md5.ComputeHash(Encoding.UTF8.GetBytes(plaintext));
        md5.Clear();

        string result = String.Empty;
        if (isThirtyTwo)
        {
            result = BitConverter.ToString(bytResult);
        }
        else
        {
            result = BitConverter.ToString(bytResult, 4, 8);
        }
        return result.Replace("-", "");
    }
}
相關文章
相關標籤/搜索