當(dāng)我們開發(fā)一款A(yù)pp的時(shí)候,App需要跟后臺(tái)服務(wù)進(jìn)行通信獲取或者提交數(shù)據(jù)。如果我們沒(méi)有完善的安全機(jī)制則很容易被別用心的人偽造請(qǐng)求而篡改數(shù)據(jù)。
所以我們需要使用某種安全機(jī)制來(lái)保證請(qǐng)求的合法?,F(xiàn)在最常用的辦法是給每個(gè)http請(qǐng)求添加一個(gè)簽名,服務(wù)端來(lái)驗(yàn)證簽名的合法性,如果簽名合法則執(zhí)行響應(yīng)的操作,如果簽名非法則直接拒絕請(qǐng)求。
簽名算法
簽名算法一般都使用Hash散列算法,常用的有MD5,SHA系列算法。這些算法可以根據(jù)不同的輸入,計(jì)算出不同的結(jié)果,而且碰撞的概率很低。
簽名算法跟加密算法不是一回事。很多同學(xué)都會(huì)說(shuō)使用MD5加密一下,其實(shí)這是錯(cuò)誤的。簽名算法不能恢復(fù)原來(lái)的數(shù)據(jù),因?yàn)樗旧聿⒉话瓉?lái)數(shù)據(jù)的信息。
而加密方法不同,加密方法是可以根據(jù)加密結(jié)果重新推算出原來(lái)的數(shù)據(jù)的。
HMAC SHA作為一種更加安全的簽名算法,使用一個(gè)Key來(lái)影響簽名的結(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(); } }
簽名的參數(shù)
延伸閱讀
- ssh框架 2016-09-30
- 阿里移動(dòng)安全 [無(wú)線安全]玩轉(zhuǎn)無(wú)線電——不安全的藍(lán)牙鎖 2017-07-26
- 消息隊(duì)列NetMQ 原理分析4-Socket、Session、Option和Pipe 2024-03-26
- Selective Search for Object Recognition 論文筆記【圖片目標(biāo)分割】 2017-07-26
- 詞向量-LRWE模型-更好地識(shí)別反義詞同義詞 2017-07-26
- 從棧不平衡問(wèn)題 理解 calling convention 2017-07-26
- php imagemagick 處理 圖片剪切、壓縮、合并、插入文本、背景色透明 2017-07-26
- Swift實(shí)現(xiàn)JSON轉(zhuǎn)Model - HandyJSON使用講解 2017-07-26
- 阿里移動(dòng)安全 Android端惡意鎖屏勒索應(yīng)用分析 2017-07-26
- 集合結(jié)合數(shù)據(jù)結(jié)構(gòu)來(lái)看看(二) 2017-07-26