java和c#md5加密不同


java的mad5加密后為32位字符串,c#直接加密后可能不是32位,位數也不確定。

普通的寫法

public static string Md5(string sourcein)
{
var md5Csp = new MD5CryptoServiceProvider();
byte[] md5Source = Encoding.UTF8.GetBytes(sourcein);
byte[] md5Out = md5Csp.ComputeHash(md5Source);

return Convert.ToBase64String(md5Out);
}

這樣出來的結果肯定和java的不一樣

如果要實現兼容:c#的寫法就要改變:

/// <summary>
        /// 32位MD5加密
        /// </summary>
        /// <param name="str"></param>
        /// <returns></returns>
        public static string Md532(string str)
        {
            var md5Csp = new MD5CryptoServiceProvider();
            byte[] md5Source = Encoding.UTF8.GetBytes(str);
            byte[] md5Out = md5Csp.ComputeHash(md5Source);
            string pwd = "";
            for (int i = 0; i < md5Out.Length; i++)
            {
                pwd  += md5Out[i].ToString("x2");
            }
            return pwd;
        }

注意

md5Out[i].ToString("x2"),如果直接用md5Out[i].ToString("x")會丟位,就是0位的字節會丟掉

ToString("X2") 為C#中的字符串格式控制符

X為     十六進制 
2為     每次都是兩位數

比如   0x0A ,若沒有2,就只會輸出0xA 
假設有兩個數10和26,正常情況十六進制顯示0xA、0x1A,這樣看起來不整齊,為了好看,可以指定"X2",這樣顯示出來就是:0x0A、0x1A。 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM