一秉氧、前后端要做到安全的數(shù)據(jù)交互通常需要了解以下幾個(gè)技術(shù):
1、對(duì)稱加密:指加密和解密使用相同密鑰的加密算法演训,速度較快(包括DES算法弟孟,3DES算法,RC5算法样悟,AES算法等)拂募。可參考:http://www.reibang.com/p/f14dbe3a9692
2窟她、非對(duì)稱對(duì)稱加密:指加密和解密使用不同密鑰的加密算法陈症,速度較慢(包括RSA等)≌鹛牵可參考:http://www.reibang.com/p/3d24a74e72ae 和http://www.reibang.com/p/74a796ec5038
3录肯、哈希算法:簡(jiǎn)單來說就是一種將數(shù)據(jù)通過算法變成不可逆的數(shù)據(jù)(包括:MD5、HMAC等)
4吊说、數(shù)字簽名:是一種類似寫在紙上的普通的物理簽名论咏,但是使用了公鑰加密領(lǐng)域的技術(shù)實(shí)現(xiàn),用于鑒別數(shù)字信息的方法颁井。
二潘靖、流程:
1 、首先需要有一對(duì)RSA的公鑰和私鑰 , 然后私鑰留在服務(wù)器,公鑰存放在本地;
2蚤蔓、通訊時(shí)卦溢,客戶端先將數(shù)據(jù)進(jìn)行簽名,簽名可參照微信支付將請(qǐng)求參數(shù)按照參數(shù)名ASCII碼從小到大排序(字典序)秀又,使用URL鍵值對(duì)的格式(即key1=value1&key2=value2…)進(jìn)行拼接单寂。然后用MD5進(jìn)行加密得到sign1。(溫馨提示:請(qǐng)求參數(shù)中可加入時(shí)間戳和隨機(jī)字符串吐辙,可防止重放攻擊)
3 宣决、其次客戶端隨機(jī)生成一個(gè)字符串作為AES加密的key1,用AES加密算法來加密與服務(wù)器傳輸?shù)闹饕獌?nèi)容;
4、 最后 客戶端 使用RSA的 公鑰 將AES的key1進(jìn)行加密,與AES加密后的內(nèi)容和sign1一同傳輸給服務(wù)器;
5 昏苏、服務(wù)器 端先用RSA的 私鑰 將AES的key1進(jìn)行解密,然后使用這個(gè)key1來解密傳輸?shù)闹饕獌?nèi)容;
6尊沸、然后服務(wù)器運(yùn)用客戶端使用的簽名方法將主要內(nèi)容進(jìn)行簽名得到sign威沫,然后跟sign1進(jìn)行對(duì)比。如果相同即數(shù)據(jù)沒有被篡改洼专。
7棒掠、第5步確認(rèn)無誤后,服務(wù)器將要返回給客戶端的數(shù)據(jù)進(jìn)行簽名得到sign2屁商。
8烟很、然后隨機(jī)生成一個(gè)字符串作為AES加密的key2,用AES加密算法來加密需要返回的數(shù)據(jù)內(nèi)容;
9蜡镶、其次 服務(wù)器 再使用RSA的 私鑰 將AES的key2進(jìn)行加密,與AES加密后的內(nèi)容和sign2一同返回給客戶端;
10雾袱、客戶端 收到服務(wù)器返回的數(shù)據(jù)后先用RSA的 公鑰 將AES的key2進(jìn)行解密,然后使用這個(gè)key2來解密返回的主要內(nèi)容;
11、最后將主要內(nèi)容進(jìn)行簽名得到sign官还,與sign2進(jìn)行對(duì)比芹橡。如果一致則表示數(shù)據(jù)無誤⊥祝可進(jìn)行后續(xù)操作林说。
如下圖所示客戶端向服務(wù)器發(fā)送請(qǐng)求(服務(wù)器向客戶端發(fā)送請(qǐng)求類似,如有不清楚的地方可留言):