MD5簽名


MD5是屬於摘要加密,不可逆

 
簽名過程:
1. 將參數按key排序,完后收尾(用 &)鏈接,形成類似 a=1&b=2&c=3 的字符串 preStr
2. 用簽名秘鑰 signKey 對以上字符串  preStr  做簽名,生成 簽名 sign
3. 將 sign 以及它的值 合並到請求的參數中,想服務器做請求
 
驗簽過程:
1. 將接收到的參數出去sign外首尾相連,形成   a=1&b=2&c=3 的字符串 preStr
2.    用簽名秘鑰 signKey 對以上字符串  preStr  做簽名,生成 簽名 sign2
3. 對比參數中sign和sign2是否相等
 
代碼如下:
        /// <summary>
        /// <![CDATA[把數組所有元素,按照“參數=參數值”的模式用&字符拼接成字符串 "" 和 null 值 去除]]>
        /// </summary>
        /// <param name="dicArray">需要拼接的數組</param>
        /// <returns>拼接完成以后的字符串</returns>
        public static string BuildPreSingString(SortedDictionary<string, string> dicArray)
        {
            var prestr = new StringBuilder();
            foreach (KeyValuePair<string, string> temp in dicArray)
            {
                if (temp.Key != "sign" && temp.Value != "" && temp.Value != null)
                {
                    prestr.Append(temp.Key + "=" + temp.Value + "&");
                }
            }

            //去掉最後一個&字符
            int nLen = prestr.Length;
            prestr.Remove(nLen - 1, 1);
            return prestr.ToString();
        }
        /// <summary>
        /// MD5簽名
        /// </summary>
        /// <param name="prestr">待簽名字符串</param>
        /// <param name="key">密鑰</param>
        /// <param name="charset">編碼</param>
        /// <returns>簽名</returns>
        public static string Sign(string prestr, string key, string charset = "utf-8")
        {
            prestr = prestr + "&key=" + key;
            var sb = new StringBuilder(32);
            MD5 md5 = new MD5CryptoServiceProvider();
            var arr = md5.ComputeHash(Encoding.GetEncoding(charset).GetBytes(prestr));
            foreach (var b in arr)
            {
                sb.Append(b.ToString("x").PadLeft(2, '0'));
            }
            return sb.ToString();
        }

 


免責聲明!

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



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