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,可以用於根證照、伺服器證照和客戶證照的管理。
轉:blog.csdn.net/shenyongjun…
PKCS 全稱是 Public-Key Cryptography Standards ,是由 RSA 實驗室與其它安全系統開發商為促進公鑰密碼的發展而制訂的一系列標準,PKCS 目前共釋出過 15 個標準。 常用的有:
PKCS#7 Cryptographic Message Syntax Standard
PKCS#10 Certification Request Standard
PKCS#12 Personal Information Exchange Syntax Standard
X.509是常見通用的證照格式。所有的證照都符合為Public Key Infrastructure (PKI) 制定的 ITU-T X509 國際標準。
PKCS#7 常用的字尾是: .P7B .P7C .SPC
PKCS#12 常用的字尾有: .P12 .PFX
X.509 DER 編碼(ASCII)的字尾是: .DER .CER .CRT
X.509 PAM 編碼(Base64)的字尾是: .PEM .CER .CRT
.cer/.crt是用於存放證照,它是2進位制形式存放的,不含私鑰。
.pem跟crt/cer的區別是它以Ascii來表示。
pfx/p12用於存放個人證照/私鑰,他通常包含保護密碼,2進位制方式
p10是證照請求
p7r是CA對證照請求的回覆,只用於匯入
p7b以樹狀展示證照鏈(certificate chain),同時也支援單個證照,不含私鑰。
—————-
小美注:
der,cer檔案一般是二進位制格式的,只放證照,不含私鑰
crt檔案可能是二進位制的,也可能是文字格式的,應該以文字格式居多,功能同der/cer
pem檔案一般是文字格式的,可以放證照或者私鑰,或者兩者都有
pem如果只含私鑰的話,一般用.key副檔名,而且可以有密碼保護
pfx,p12檔案是二進位制格式,同時含私鑰和證照,通常有保護密碼
怎麼判斷是文字格式還是二進位制?用記事本開啟,如果是規則的數字字母,如
—–BEGIN CERTIFICATE—–
MIIE9jCCA96gAwIBAgIQVXD9d9wgivhJM//a3VIcDjANBgkqhkiG9w0BAQUFADBy
—–END CERTIFICATE—–
就是文字的,上面的BEGIN CERTIFICATE,說明這是一個證照
如果是—–BEGIN RSA PRIVATE KEY—–,說明這是一個私鑰
文字格式的私鑰,也可能有密碼保護
文字格式怎麼變成二進位制? 從程式角度來說,去掉前後的—-行,剩下的去掉回車,用base64解碼,就得到二進位制了
不過一般都用命令列openssl完成這個工作
—————
一 用openssl建立CA證照的RSA金鑰(PEM格式):
openssl genrsa -des3 -out ca.key 1024
二用openssl建立CA證照(PEM格式,假如有效期為一年):
openssl req -new -x509 -days 365 -key ca.key -out ca.crt -config openssl.cnf
openssl是可以生成DER格式的CA證照的,最好用IE將PEM格式的CA證照轉換成DER格式的CA證照。
三 x509到pfx
pkcs12 -export –in keys/client1.crt -inkey keys/client1.key -out keys/client1.pfx
四 PEM格式的ca.key轉換為Microsoft可以識別的pvk格式。
pvk -in ca.key -out ca.pvk -nocrypt -topvk
五 PKCS#12 到 PEM 的轉換
openssl pkcs12 -nocerts -nodes -in cert.p12 -out private.pem
驗證 openssl pkcs12 -clcerts -nokeys -in cert.p12 -out cert.pem
六 從 PFX 格式檔案中提取私鑰格式檔案 (.key)
openssl pkcs12 -in mycert.pfx -nocerts -nodes -out mycert.key
七 轉換 pem 到到 spc
openssl crl2pkcs7 -nocrl -certfile venus.pem -outform DER -out venus.spc
用 -outform -inform 指定 DER 還是 PAM 格式。例如:
openssl x509 -in Cert.pem -inform PEM -out cert.der -outform DER
八 PEM 到 PKCS#12 的轉換,
openssl pkcs12 -export -in Cert.pem -out Cert.p12 -inkey key.pem