https是一種加密傳輸協議,基於非對稱加密演算法和對稱加密演算法的協作使用。
伺服器每次傳送真實資料前,會先生成一把金鑰傳輸給客戶端,伺服器給客戶端傳送的真實資料會實現用這把金鑰進行加密,客戶端收到加密資料後再用金鑰進行解密。(客戶端給伺服器傳送資料同理)
圖一.https對稱加密
2.單一使用對稱加密可能產生的問題
1.攔截客戶端報文,偽造金鑰
當客戶端初次向伺服器請求金鑰時,報文可能被黑客截獲,黑客偽裝伺服器向客戶端返回乙個黑客生成的金鑰,當客戶端使用該虛假金鑰傳送報文時,黑客就可以解密客戶端傳送的報文資訊。
2.攔截伺服器報文,截獲金鑰
當客戶端初次向伺服器請求金鑰時,伺服器返回金鑰報文,中途被黑客截獲,獲得金鑰資訊,當客戶端傳送加密報文給伺服器或者伺服器返回加密報文時都可能被截獲報文資訊並解密。
3.https非對稱加密
客戶端和伺服器都有兩把金鑰,一把公鑰和私鑰(公鑰加密的資料只有私鑰才能解密,私鑰加密的資料只有公鑰才能解密),客戶端在給伺服器傳送真實資料前,先用伺服器明文傳輸給客戶端的公鑰進行加密,伺服器收到後用自己的私鑰進行解密,反之同理。
4.單一使用非對稱加密可能產生的問題
1.攔截客戶端報文,偽造公鑰
當客戶端初次向伺服器請求金鑰時,伺服器返回公鑰報文,中途被黑客截獲,並且黑客修改報文中的公鑰資訊為黑客生成的公鑰。當客戶端傳送使用黑客虛假公鑰加密的報文給伺服器時,可能被黑客截獲報文資訊並且用黑客私鑰解密。
2.攔截服務端報文,偽造公鑰
當客戶端初次向伺服器請求金鑰時,伺服器返回公鑰報文,中途被黑客截獲,並且黑客修改報文中的公鑰資訊為黑客生成的公鑰。當客戶端傳送使用黑客虛假公鑰加密的報文給伺服器時,可能被黑客截獲報文資訊並用黑客私鑰解密。
基於上述分析,我們知道無論是單一對稱加密還是單一非對稱加密,都會存在傳輸的資訊被截獲並被解密的風險,那麼我們有什麼辦法能規避這些風險呢?沒錯,可以採用採用非對稱加密+對稱加密傳輸(以非對稱加密的方式傳輸對稱加密金鑰)。
圖二.https對稱加密+非對稱加密傳輸
核心在於證明客戶端收到的公鑰是屬於伺服器的,解決這個辦法是使用數字證書(即找到乙個大家都認可的認證中心ca)。
伺服器在給客戶端傳輸公鑰的工程中,會將公鑰+伺服器個人資訊通過hash演算法生成資訊摘要,為防止資訊摘要被掉包,伺服器會用ca提供的金鑰對資訊摘要加密形成數字簽名。最後還會將沒有進行hash演算法計算的伺服器個人資訊+公鑰和數字簽名合併在一起形成數字證書。
圖二.https對稱加密+非對稱加密傳輸過程
1.客戶端向伺服器發出https請求;
2.伺服器會將自己的公鑰以及伺服器個人資訊傳送給乙個數字證書認證機構,認證機構生成乙個數字證書返回給伺服器;
3.伺服器將收到的證書傳送給客戶端;
4.客戶端收到證書後驗證證書的可信性:
a.如果不可信,彈出提示資訊;
b.可信,或者使用者接受了不可信的證書,客戶端解密證書獲取到其中伺服器的公鑰,並生成隨機的對稱金鑰,並用伺服器的公鑰加密,傳送給伺服器;
5.伺服器收到後,用自己的金鑰解密獲得對稱金鑰,此時伺服器和客戶端都知道了對稱金鑰,他們在互發訊息時就可以使用這個金鑰來加密傳輸了,從而保證了資訊的安全。
KMP演算法(淺顯易懂)
kmp演算法求解什麼型別問題 字串匹配。給你兩個字串,尋找其中乙個字串是否包含另乙個字串,如果包含,返回包含的起始位置。講道理 大串a 長度n 小串b 長度m 一般匹配字串,乙個乙個比,當前字元對了則比對下乙個,不對了再從b的頭開始比,移動乙個位置 這樣的時間複雜度是o n m kmp可以實現複雜度...
淺顯易懂的委託
一 我對委託的理解 委託是方法的容器,它不生產方法,它只是方法的搬運工。委託這個詞用到程式設計裡面對於很多新人來說可能都不太好理解,以前剛接觸委託的時候也看過不少文章,對於這個詞的解釋大多都雲裡霧裡。但把 委託 換成 託付 對於它的理解可能會清晰不少。例如,劉備將兒子委託給了趙雲和劉備將兒子託付給了...
淺顯易懂的桶排序
想準備將所有的排序演算法都總結出來,方便你查閱,也方便我複習和記憶,下面來說桶排序 首先必須申明,桶排序和計數排序完全不同,不可混為一談 這裡例項用單鏈表來操作 還是老方法,看文字就是煩,直接上圖,結合,永遠都是王道 1.假設 桶待排序列 看了之後有沒有特莫感覺就是雜湊桶,哈哈,滿足一定條件差不多就...