天天看點

部落格園首頁博問閃存新随筆聯系訂閱管理 随筆- 252 文章- 0 評論- 45 HashPasswordForStoringInConfigFile中的Md5算法并非常用的Md5算法

今天在開發一個軟體時,同時在B/S版和C/S版中都要用到MD5加密,在

ASP.NET中使用的是

    /**//// <summary>

    /// 取得MD5加密串

    /// </summary>

    /// <param name="input">源明文字元串</param>

    /// <returns>密文字元串</returns>

    public static string GetMD5Hash(string input)

    ...{

        return System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(strOriginal, "MD5");

    }

的加密方式;

而在WinForm中用的是

        System.Security.Cryptography.MD5CryptoServiceProvider md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();

        byte[] bs = System.Text.Encoding.Default.GetBytes(input);

        bs = md5.ComputeHash(bs);

        System.Text.StringBuilder s = new System.Text.StringBuilder();

        foreach (byte b in bs)

        ...{

            s.Append(b.ToString("x2").ToUpper());

        }

        string password = s.ToString();

        return password;

但發現同樣一個字元串,兩種方式得出的密文是不一樣的,最後才發現原來是編碼方式導緻的,ASP.NET裡預設的是UTF-8編碼,把WinForm程式裡的System.Text.Encoding.Default.GetBytes(input);替換成System.Text.Encoding.UTF8.GetBytes(input);即可

最終正确版:

        byte[] bs = System.Text.Encoding.UTF8.GetBytes(input);

本文轉自左正部落格園部落格,原文連結:http://www.cnblogs.com/soundcode/p/3803394.html,如需轉載請自行聯系原作者

繼續閱讀