一、名詞介紹
1)加密:
是以某種特殊的算法改變原有的信息數據,以另外一種形式呈現,這里有幾個名詞:
加密之前的信息數 據可以理解為原數據,
原文;加密之后的數據信息可以被理解為密文,一般的呈現格式為一串字符,從字 符上來看,沒有什么規律!
2)解密: 由加密后得到的密文,通過解密算法,解密以后,可以得到未曾加密之前的原信息數據,原文,被稱之 為解密
二、
加密的分類
1)不可逆加密 不可逆,不可逆,就是指不能不能返回,就是原信息數據,通過加密后得到的密文數據信息,不存在算 法,讓密文變回來,不能變回原文信息; 經常以MD5 hash散列計算為代表;
2)可逆加密 可逆,可逆,就是指原信息數據,通過加密算法,加密后,得到的密文數據信息,存在一種解密算法, 可以讓密文解密后得到原文信息
三、不可逆加密MD5 MD5加密,就是典型的不可逆的加密,因為他只能從數據信息通過加密后得到密文信息,而不能從密文 再通過計算得到原文;
1) 規則: 1.MD5公開的算法,hash散列計算; 任何語言實現后其實都一樣,通用的,無論是C#,java....各種語言 的實現都一樣的。本質是通過hash散列計算,可以對普通的數據信息進行加密,也可以對文件生成文件的 摘要。
2.相同原數據信息加密的結果是一樣的
3.不同長度的內容加密后加過都是32位
4.原文差別很小,結果差別很大
5.不管文件多大,都能產生32位長度摘要
6.文件內容有一點改動,結果變化非常大
7.文件內容不變,名字變了,結果是不變
2) 作用:
a).防篡改 發個文檔,事先給別人一個MD5,是文檔的摘要,源代碼管理器svn--即使電腦斷網了,文件有任何改動 都能被發現--本地存了一個文件的MD5--文件有更新,就再對比下MD5,極速秒傳--掃描文件的MD5--跟 已有的文件MD5比對--吻合表示文件已存在不用再上傳
b).密碼保存,防止看到明文 不可逆 密碼應該只有用戶知道----數據庫不能存明文---但是又需要驗證,MD5加密下原始密碼---數據庫存密文--- 下次登錄把密碼MD5后再比對,密文是可見的,所以要求密碼不能太簡單,)
c).防止抵賴 防止抵賴,數字簽名,把一些內容摘要一下,由權威的第三方去保障,將來這個文件就是你做的,不能抵 賴
3) MD5的爭議 實質上,MD5 只是一種哈希算法。哈希算法,又叫散列算法,是一類把任意數據轉換為定長(或限制長 度)數據的算法統稱。可以把數據計算后得到一個hash散列值,不能計算得到原數據。 部分人認為Md5不算是加密算法,他們認為加密就要對應一個解密,可以把原文加密成密文,也能從密 文解密到原文,這才算加密。也有部分人認為這個為不可逆加密,這里Richard不過過多的點評!
四、對稱可逆加密Des
1)規則:
1.對稱可逆加密,有一組加密解密算法,成套的,且算法是公開的,不同編程語言的應用也是相同的。 算法公開,你知道,我也知道,大家都知道。
2.有一組加密解密Key--秘鑰,且秘鑰是完全相同的,加密和解密均需要使用秘鑰,因為秘鑰相同。 也就說說解密和解密都需要使用同一個秘鑰。知道加密解密算法,無法推導出密鑰的;
3.加密使用的秘鑰,在解密的時候,也必須使用這個秘鑰才能解開;
2)特點:
1.原文長---加密后--密文也長,原文短---加密后---密文也相對要短一些
2.加密解密速度超快
3.容易泄露秘鑰,因為秘鑰是一樣的,安全性不是最高,相比於非對稱可逆加密而言;
3)作用:
1.互聯網傳輸加密數據信息
2.防止抵賴
3.Jwt鑒權授權
五、非對稱可逆加密Rsa
1)規則:
1.非對稱可逆加密:有一套公開的加密解密算法,公開的,大家都知道;
2.同時有一組加密解密Key,這組Key是成套的,且兩個Key不一樣;無法通過加密算法推導出這一組 key;且具有私有key和共有key之分,私有key就是只有自己知道的,私有化的;可以加密也可以解密; 共有key,是公開的,所有人都可以知道。 注意:在其他 的有些實現中,是私有key加密,公有key解密,這個是為了能夠做簽名;在C#中的實現, 提供的Api是公有key加密,只能由私有key解密; 關於簽名這個有另外的api支持.
2)特點:
1.原文短---加密后---密文長
2.加密速度相對要慢
3.安全性超強---成套的加密解密key不一樣
3)作用
1.數據的安全傳輸
2.直接支持的加密解密api,還無法完成簽名; 簽名:實際在數字簽名的時候,是需要私有key加密,共有key解密的; 簽名:私鑰加密----公鑰解密
4)Rsa驗證簽名
1.私鑰簽名
2.公鑰驗簽
番外篇:
非對稱可逆加密: rsa dsa ecdsa
六、數字簽名和數字證書
1)簽名 歷史中的通信,都是通過書信來傳遞信息,那么在寫信的時候,除了寫信件的正文,在信件的最后,需 要有一個寫信人的親筆簽名,這就標注,這封信件是來自於誰的,誰寫出的這封信。也可以通過字跡來 辨別真偽。如果有人冒充,可以通過字跡來辨別,那么這個親筆簽名就有很大的作用了。 現在傳輸信息是互聯網傳輸信息,那么在傳輸的過程中,也需要明確指定這個信息是哪兒傳來的,那么 就需要明確的簽名來指定是誰發的。網絡傳輸是很不安全的,如果直接傳輸數據,數據信息有可能會被 篡改。那怎么做呢?請看下圖: 注意:其他支持:私有key加密+公有key解密 場景:小明給小紅傳輸信息: 服務器和客戶端之間的數據傳輸 小明發送准備: 第一步:小明把文件信息,通過MD5加密(哈希運算)得到一個MD5密文。 第二步:小明在本地通過Rsa生成一組加密解密key(非對稱加密)。 第三步:使用這組Rsa的加密key加密MD5密文,得到的內容就是簽名 第四步:小明把簽名+需要傳輸的文件數據+本地生成的解密key打包到一起,發送到互聯網傳輸----傳遞 給小紅。 小紅收道消息: 第一步:使用公鑰解密簽名,如果正常解密,就可以得到小明發送過來的文件信息中的MD5密文。 第二步:使用MD5(哈希計算)把傳過來的文件信息MD5加密,就可以得到文件信息的MD5密文。 現在就有一個是通過解密得到的文件信息的MD5密文,一個是通過文件信息MD5后的密文。 第三步:比對這兩個MD5密文,如果密文完全一樣,說明,傳輸過來的文件信息是沒有被篡改過,如果 篡改過,MD5后的文件信息,是不能等於解密后的MD5數據的。 私有key加密+公有key解密 問題:.其實以上只能保證文件數據沒有被篡改過。 2.不能保證小紅收到的消息一定是來自於小明,雖然簽名上寫的是小明,但是這個東西是有可能偽造 的。 就類似於,你收到一封信,信件末尾的簽名寫的是小明,其實這封信是有可能是其他人來偽造的。 那么在數字簽名中,也存在這樣的一個問題,因為接受到的消息中的公鑰是發送者提供的,如果其他 人,發送了一條消息給小紅,同時在發送的時候,簽名說是小明發的,在小紅那里按照以上規則也可以 成功的。但是這個時候,這里已經被他人頂替了。 所以以上的簽名:只能保證消息在傳輸的過程中,不被篡改,並不能完全保證這個文件數據是一定來自 於誰。 為了更加安全,不被冒充,所以就需要證明這個發送者的身份。怎么證明呢?請往下看。數字證書!
CA
CA是內置在瀏覽器中的不能被篡改的