C# MD5 32大寫位加密 UTF-8編碼

        string UserMd5(string str)
        {
            string cl = str;
            string pwd = "";
            MD5 md5 = MD5.Create();//實例化一個md5對像
            // 加密後是一個字節類型的數組,這裏要注意編碼UTF8/Unicode等的選擇 
            byte[] s = md5.ComputeHash(Encoding.UTF8.GetBytes(cl));
            // 經過使用循環,將字節類型的數組轉換爲字符串,此字符串是常規字符格式化所得
            for (int i = 0; i < s.Length; i++)
            {
                // 將獲得的字符串使用十六進制類型格式。格式後的字符是小寫的字母,若是使用大寫(X)則格式後的字符是大寫字符 
                pwd = pwd + s[i].ToString("X");
            }
            return pwd;
        }

最開始我使用上面的進行加密,後來只要出現中文我就發現常常性的會少一位數或者少幾位數,通過檢查發現Encoding.Default使用的是默認的編碼:gb2312數組

因此改變加密方式:編碼

   string UserMd5(string str)
        {
            string cl = str;
            string pwd = "";
            MD5 md5 = MD5.Create();//實例化一個md5對像
            // 加密後是一個字節類型的數組,這裏要注意編碼UTF8/Unicode等的選擇 
            byte[] s = md5.ComputeHash(Encoding.UTF8.GetBytes(cl));
            // 經過使用循環,將字節類型的數組轉換爲字符串,此字符串是常規字符格式化所得
            for (int i = 0; i < s.Length; i++)
            {
                // 將獲得的字符串使用十六進制類型格式。格式後的字符是小寫的字母,若是使用大寫(X)則格式後的字符是大寫字符 
                pwd = pwd + s[i].ToString("X2");
            }
            return pwd;
        }

X表明取消最開始的0  X2表明不省略開始的0    加密

eg: 0D12   ==X==》D12spa

         0D12   ==X2==》0D12code

相關文章
相關標籤/搜索