《Java加密與解密藝術》讀後總結
JAVA加密與解密:
訊息摘要演算法:MD,SHA,MAC
對稱加密演算法:DES,3DES,AES
非對稱加密演算法:RSA
簽名演算法:RSA,DSA
訊息摘要與簽名的區別:訊息摘要保證資料完整性,沒有被篡改;簽名確保訊息是由傳送方傳送;簽名演算法中也會涉及的摘要;簽名演算法實際上就是訊息摘要與非對稱加密演算法的合體;
簽名與加密:公鑰加密,私鑰解密(一般業務場景下如此);私鑰簽名,公鑰驗籤
DES:
金鑰長度56-64位
使用方式:
-
1)傳送方構建金鑰,並公佈金鑰
-
2)傳送方使用金鑰對資料加密,併發送加密資料
-
3)接收方使用金鑰對接收資料解密
3DES:
解決DES金鑰太短的問題,金鑰長度112-168位,增加了迭代次數,速度較慢,效率不高
使用方式同DES
AES:
解決3DES加密效率低,速度慢的問題,成為DES演算法的替代者
使用方式同DES
RAS:
非對稱加密演算法
jdk加密相關jar包以及package:
-
rt.jar: java.security.*包,定義了訊息摘要演算法的實現(不包括mac演算法)以及加解密演算法的使用介面
-
jce.jar:java.crypto.*包,DES,3DES以及AES中使用較多,RSA中會用到Cipher類。其中包含了DES,3DES以及AES的實現;比較常用的類Cipher,KeyGenerator,SecretKey,Key,SecretKeyFactory
-
rt.jar:java.security.cert.*包,提供用於解析和管理證書的類和介面,如Certificate以及CertificateFactory
-
Bouncy Castle:加密元件,安全提供者,javajce的補充(如java6不支援MD4,SSH-224,但bc支援),以及一些工具類,如Base64編碼(UrlBase64類)以及十六進位制編碼(Hex類)。
-
commons-codex:apache軟體,主要用於編碼格式轉換,如Base64,二進位制,十六進位制,url編碼等,並且對java原生訊息摘要演算法進行了封裝。如Base64類,Hex類;DigestUtils工具類提供了MD5和SHA系列演算法實現,對MessageDigest進行了封裝。
Bouncy castle與common codec的Base64區別?
bc僅實現了一般base64演算法;common-codec通過傳入引數方式可以選擇使用一般base64還是遵循RFC2045的Base64;差別是後者編碼後會在行末尾加上\r\n換行。
UrlBase64與Base64區別?
因為以get方式傳輸二進位制資料時或者以get方式傳遞本該由post方式傳遞的私密資料時,使用base64對其編碼成字串再傳輸比較好。但是由於url中對一些字元有限制,比如“+”,“/”等,而傳統base64編碼後會出現這些字元,因此出現了UrlBase64編碼。同樣Bouncy Castle和common codec都實現了它。
MD,SHA以及MAC等訊息摘要的區別?
SHA演算法基於MD4演算法基礎上,作為MD演算法繼任者,成為新一代的訊息摘要演算法。主要不同之處在於摘要長度,SHA演算法的摘要長度更長,安全性更高。
MAC演算法又叫做安全資訊摘要演算法,與SHA以及MD不同的是,使用MAC做摘要,傳送方需要構建金鑰併發送金鑰給接收方,接收方使用金鑰對資料做摘要並與傳送方傳送的摘要對比;而MD以及SHA不涉及金鑰;
數字證書(cer,pfx,der,p7b,p7c,p10,p12,csr)字尾:
當看到cer或pfx結尾的檔案,就是數字證書;證書可以作為公鑰的載體來傳播;證書分為CA證書和自簽名證書;CA證書是權威認證,自簽名證書是自己頒發給自己(自己既是申請者又是頒發者)。
keyTool證書管理:可以通過jdk的bin目錄下KeyTool工具生成數字證書,並匯出證書檔案;
OpenSSL證書管理:OpenSSL功能遠勝於KeyTool,可以用於根證書、伺服器證書和客戶證書的管理。