前言
目前我所知道的項(xiàng)目開發(fā)中,基本上都是前后端分離的够庙。這就出現(xiàn)了數(shù)據(jù)傳輸?shù)膯栴}恭应,前端傳給服務(wù)器 或者 服務(wù)器傳給前端的數(shù)據(jù)都是容易被別人竊取的。這里就要對傳輸?shù)臄?shù)據(jù)進(jìn)行加解密耘眨,以保證數(shù)據(jù)安全昼榛。
下面介紹兩種前后端數(shù)據(jù)傳輸?shù)姆绞?/p>
第一種方式 (參數(shù)中加簽名,驗(yàn)證簽名)
前后端約定一個key,將請求參數(shù)按照字母排序拼接成一個字符串(通常都是ASCll排序)剔难,然后拼接上key,最后用MD5或者SHA進(jìn)行加密胆屿,得到一個加密的簽名sign,再把sign作為最后一個參數(shù)傳到服務(wù)端偶宫。
服務(wù)端拿到前端傳過來的結(jié)果之后非迹,也將參數(shù)(排除sign)按照順序拼接成一個字符串,再拼接上key纯趋,再用MD5或者SHA進(jìn)行加密憎兽,也得到了一個新的sign冷离,服務(wù)端比較這兩個sign,如果相同就說明傳回來的數(shù)據(jù)沒有問題纯命,如果不相同西剥,說明數(shù)據(jù)被串改了。
例如:
傳遞的參數(shù)是
id=5&age=10
現(xiàn)在通過加簽 應(yīng)該傳遞的參數(shù)為
id=5&age=10&sign=MD5(age=10&id=5)
服務(wù)端拿到的就是
id=5&age=10&sign=MD5(age=10&id=5)
服務(wù)端經(jīng)過篩選參數(shù)扎附,得到id=5&age=10
蔫耽,然后進(jìn)行排序得到age=10&id=5
,再M(fèi)D5得到sign,兩個sign進(jìn)行比較
第二種方式 (對數(shù)據(jù)進(jìn)行加解密留夜,混合密碼方式)
目前我知道的根據(jù)秘鑰的使用方法匙铡,可以將密碼分為兩種
對稱密碼(俗稱對稱加解密)
公鑰密碼(非對稱密碼) (俗稱非對稱加解密)
在對稱密碼中,加密碍粥、解密時使用的是同一個密鑰鳖眼,我們常用的AES算法就是對稱密碼算法。具體AES算法大家自己百度就好了
但是通常使用對稱密碼時嚼摩,就會有秘鑰配送問題钦讳。
例:發(fā)送者A將使用對稱密碼加密過得信息發(fā)送給接收者B,只有將秘鑰發(fā)送給接收者B枕面,B才能進(jìn)行解密愿卒,這里A發(fā)送秘鑰給B的過程中,就容易被別人竊取秘鑰潮秘,別人拿著秘鑰也能進(jìn)行解密琼开。
如何解決秘鑰配送問題
我知道的幾種解決方法
- 事先共享秘鑰
- 秘鑰分配中心
- 公鑰密碼(非對稱密碼)
公鑰密碼
公鑰密碼中,密鑰分為加密密鑰枕荞、解密密鑰2種柜候,它們并不是同一個密鑰。
目前使用最廣泛的公鑰密碼算法是RSA
加密密鑰躏精,一般是公開的渣刷,因此該密鑰稱為公鑰(public key)
解密密鑰,由消息接收者自己保管的矗烛,不能公開辅柴,因此也稱為私鑰(private key)
公鑰和私鑰是一 一對應(yīng)的,是不能單獨(dú)生成的瞭吃,一對公鑰和密鑰統(tǒng)稱為密鑰對(key pair)
由公鑰加密的密文碌识,必須使用與該公鑰對應(yīng)的私鑰才能解密
由私鑰加密的密文,必須使用與該私鑰對應(yīng)的公鑰才能解密
我們用公鑰密碼來解決秘鑰配送問題
1.由消息的接收者虱而,生成一對公鑰、私鑰
2.將公鑰發(fā)給消息的發(fā)送者
3.消息的發(fā)送者使用公鑰加密消息
混合密碼系統(tǒng)
- 對稱密碼的缺點(diǎn)
不能很好地解決密鑰配送問題
- 公鑰密碼的缺點(diǎn)
加密解密速度比較慢
混合密碼系統(tǒng)开泽,是將對稱密碼和公鑰密碼的優(yōu)勢相結(jié)合的方法牡拇,解決了公鑰密碼速度慢的問題,并通過公鑰密碼解決了對稱密碼的密鑰配送問題
混合密碼系統(tǒng)加密
會話密鑰(session key)為本次通信隨機(jī)生成的臨時密鑰,作為對稱密碼的密鑰惠呼,用于加密信息导俘,提高速度
- 首先,消息發(fā)送者要擁有消息接收者的公鑰(非對稱密碼的公鑰)
- 生成會話密鑰剔蹋,作為對稱密碼的密鑰旅薄,加密消息
- 用消息接收者的公鑰,加密會話密鑰
- 將前2步生成的加密結(jié)果泣崩,一并發(fā)給消息接收者
發(fā)送出去的內(nèi)容包括
- 用會話密鑰加密的消息(加密方法:對稱密碼)
- 用公鑰加密的會話密鑰(加密方法:公鑰密碼)
混合密碼系統(tǒng)解密
- 消息接收者用自己的私鑰(非對稱密碼的私鑰)解密出會話密鑰
- 再用第1步解密出來的會話密鑰少梁,解密消息
方法二總結(jié)(混合密碼方式)
前端A >>>>> 服務(wù)器端B
發(fā)送過程,加密過程
- B先生成一對公鑰矫付、私鑰
- B把公鑰共享給A
- A每次請求的時候隨機(jī)生成一個會話密鑰(臨時密鑰)
- A用會話密鑰加密需要發(fā)送的消息(使用的是對稱密碼加密)
- A用B的公鑰加密會話密鑰(使用的是公鑰密碼加密凯沪,也就是非對稱密碼加密)
- A把第4、5步的加密結(jié)果买优,一并發(fā)送給B
接收過程妨马,解密過程
- B利用自己的私鑰解密會話密鑰(使用的是公鑰密碼解密,也就是非對稱密碼解密)
- B利用會話密鑰解密發(fā)送過來的消息(使用的是對稱密碼解密)
文章參考了猿天地的再談前后端API簽名安全杀赢?和李明杰的底層原理iOS簽名機(jī)制