FormsAuthentication.HashPasswordForStoringInConfigFile 的替代方法

因爲項目中要和php對接,要將一段字符串生成md5(16位)驗證碼,在英文字符時,沒有太大問題,但在遇到中文時,兩邊字條始終不一致。php

php是別人的項目,看不到源碼,網上一查,估計是這樣寫的:ide

<?php   
echo substr(md5("admin"),8,16);  // 16位MD5加密   
echo "<hr>";   
echo md5("admin");    // 32位MD5加密   
?>  

以前的 md5代以下(對md5沒有過多研究,這段代碼也是網上找的):oop

public static string Md5_16(string str)
        {
            MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
            string t2 = BitConverter.ToString(md5.ComputeHash(UTF8Encoding.Default.GetBytes(str)), 4, 8);
            t2 = t2.Replace("-", "");
            t2 = t2.ToLower();
            return t2;
        }

在苦惱之際,想到之前還有一種md5的作法,得出的值和php生成的一比對,是正確的。但如今4.5環境下警告該方法過時了ui

return System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(str, "MD5").ToLower();   //32位

return System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(str, "MD5").ToLower().Substring(8, 16);  //16位

本着認真負責的精神,再找找找(恰好也有時間),結果仍是在msdn上找到的一段代碼,只不過把 HashPasswordForStoringInConfigFile 這個方法從新實現了下加密

public static string GetMd5Hash(string input)
        {
            MD5 md5Hash = MD5.Create();

            // Convert the input string to a byte array and compute the hash.
            byte[] data = md5Hash.ComputeHash(Encoding.UTF8.GetBytes(input));

            // Create a new Stringbuilder to collect the bytes
            // and create a string.
            StringBuilder sBuilder = new StringBuilder();

            // Loop through each byte of the hashed data 
            // and format each one as a hexadecimal string.
            for (int i = 0; i < data.Length; i++)
            {
                sBuilder.Append(data[i].ToString("x2"));
            }

            // Return the hexadecimal string.
            return sBuilder.ToString();
        }

來源連接:https://social.msdn.microsoft.com/Forums/zh-TW/590bd6a8-57d7-4041-81da-80fe8b832b77/md5spa

相關文章
相關標籤/搜索