MD5
MD5即Message-Digest Algorithm 5(信息-摘要算法5),用於確保信息傳輸完整一致。
是計算機廣泛使用的雜湊算法之一(又譯摘要算法、哈希算法),主流編程語言普遍已有MD5實現。將數據(如漢字)運算為另一固定長度值,是雜湊算法的基礎原理,MD5的前身有MD2、MD3和MD4。
API驗簽
簽名時,根據參數名稱,將除簽名(sign)外所有請求參數按照字母先后順序排序: key + value .... key + value 。 注: 1、排序若首字母相同,則對第二個字母進行排序,以此類推。 2、value無需編碼。 3、對於非必選參數,如果沒有value值,也參與簽名。(說明:非必選參數沒有value值時,將參數名放到字符串中,即參數名要參加簽名) 例如:將“foo=1,bar=2,baz=三”排序為“bar=2,baz=三,foo=1”參數名和參數值鏈接后,得到拼裝字符串bar2baz三foo1。 4、在傳入參數有數組時,比如 cartypelist [1,2] 則: 簽名:cartypelist1,2
簽名算法
將分配的得到的密鑰(SecretKey)接到參數字符串尾部進行md5加密,再轉化成大寫,
格式是:md5(key1value1key2value2...Secret)。
由於在使用MD5加密的過程中發現兩種加密算法生成的MD5值竟然不一樣
算法一,推薦
public static string GetMd5String(string source) { MD5 mD = MD5.Create(); UTF8Encoding uTF8Encoding = new UTF8Encoding(); byte[] bytes = uTF8Encoding.GetBytes(source); byte[] array = mD.ComputeHash(bytes); StringBuilder stringBuilder = new StringBuilder(); byte[] array2 = array; for (int i = 0; i < array2.Length; i++) { byte b = array2[i]; stringBuilder.Append(b.ToString("x2")); } return stringBuilder.ToString(); }
算法二
/// <summary> /// 獲得32位的MD5加密 /// </summary> /// <param name="input">輸入字符串</param> /// <returns>返回值</returns> public static string GetMD532(string input) { MD5 md5 = MD5.Create(); byte[] data = md5.ComputeHash(Encoding.Default.GetBytes(input)); var sb = new StringBuilder(); for (int i = 0; i < data.Length; i++) { sb.Append(data[i].ToString("x2")); } return sb.ToString(); }
由於編碼不同,一個是UTF8編碼,一個是默認編碼,導致有漢字的時候,會產生不同的加密結果。
所以建議在有漢字的消息編碼里對漢字進行Unincode編碼,或者統一編碼方法。