當(dāng)我們開發(fā)一款A(yù)pp的時候,App需要跟后臺服務(wù)進(jìn)行通信獲取或者提交數(shù)據(jù)。如果我們沒有完善的安全機(jī)制則很容易被別用心的人偽造請求而篡改數(shù)據(jù)。
所以我們需要使用某種安全機(jī)制來保證請求的合法。現(xiàn)在最常用的辦法是給每個http請求添加一個簽名,服務(wù)端來驗(yàn)證簽名的合法性,如果簽名合法則執(zhí)行響應(yīng)的操作,如果簽名非法則直接拒絕請求。
簽名算法
簽名算法一般都使用Hash散列算法,常用的有MD5,SHA系列算法。這些算法可以根據(jù)不同的輸入,計算出不同的結(jié)果,而且碰撞的概率很低。
簽名算法跟加密算法不是一回事。很多同學(xué)都會說使用MD5加密一下,其實(shí)這是錯誤的。簽名算法不能恢復(fù)原來的數(shù)據(jù),因?yàn)樗旧聿⒉话瓉頂?shù)據(jù)的信息。
而加密方法不同,加密方法是可以根據(jù)加密結(jié)果重新推算出原來的數(shù)據(jù)的。
HMAC SHA作為一種更加安全的簽名算法,使用一個Key來影響簽名的結(jié)果。這樣同樣的輸入配合不同的Key可以得出不同的簽名,更加安全。
public static string HmacSHA256(string secretKey,string plain) { var keyBytes = Encoding.UTF8.GetBytes(secretKey); var plainBytes = Encoding.UTF8.GetBytes(plain); using (var hmacsha256 = new HMACSHA256(keyBytes)) { var sb = new StringBuilder(); var hashValue = hmacsha256.ComputeHash(plainBytes); foreach (byte x in hashValue) { sb.Append(String.Format("{0:x2}", x)); } return sb.ToString(); } }