天天看點

JAVA加密與解密

摘要算法

摘要算法主要包含三大類型:MD算法,SHA算法,已經基于KEY的MAC算法

MD算法

MD算法主要有MD2,MD3,MD4以及最常用的MD5。

SHA算法主要有SHA-1,SHA-224,SHA-256,SHA-384,SHA-512。

MAC算法是基于哈西雜湊演算法(MD系列或者SHA系列等),在HASH散列進行KEY加密

JAVA密碼體系對主流摘要算法的支援

JAVA加密與解密

MD5算法的調用示例

執行結果

對稱加密

1、對稱加密體制要求加密與解密使用同一個共享密鑰,解密是加密的逆運算,對于共享密鑰,要求通訊雙方在通訊前協商共享密鑰并妥善儲存

2、對稱加密體制分為兩種:一種是對明文的單個位(或單個位元組)進行加密,稱為流密碼;另一種是明文劃分為不同的組(或塊),分别對組加密,稱為分組加密

3、常用的為分組加密,分組加密的安全性與分組長度有關,但是一般預設的長度為56位

4、對稱加密有DES,DESede,AES,Blowfish,RC2,RC4,IDEA。相關概念可以百度百科

分組密碼工作模式

1、電子密碼本模式ECB:每次加密均産生獨立的密文分組,每組加密的結果不會對其他組産生影響,無初始化向量

2、密文連接配接模式CBC:目前應用最廣泛的工作模式,組明文加密前需先與前面的組密文進行異或運算(XOR)在加密

3、密文回報模式CFB:類似于自同步流密碼,分組加密後,按8位分組将密文和明文進行位移異或得到輸出并同時回報回位移寄存器

4、輸出回報模式OFB:和CFB類似,不過OFB用的是前一個n位密文輸出分組回報回位移寄存器

5、計數器模式CTR:将計數器從初始值開始計數,所得到的值發送給分組密碼,随着計數器的增加,分組密碼算法輸出連續的分組來構成一個位串,該串用來與明文分組進行異或運算。在AES中,經常使用的是CBC和CTR,CTR用的比CBC更多些

填充模式

對于明文進行分組,最後一個分組長度不滿足預設長度,稱為短分組。對于短分組如何處理,需要使用到填充模式。

Java對對稱加密算法的支援

JAVA加密與解密
JAVA加密與解密

Bouncy castle對于PBE的支援

JAVA加密與解密

示例代碼

非對稱加密

DH:密鑰交換算法

DH算法的目的是解決非對稱加密解密性能問題,通過協商的方式産生對稱密鑰。生産對稱密鑰的步驟大緻如下

1、甲方通過DH算法生成甲方的公私鑰對

2、甲方加自己的公鑰發送給乙方

3、乙方根據甲方的公鑰産生自己的公私鑰對

4、甲乙雙産生協商的好的對應加密算法的對稱密鑰。甲方生成是通過甲方私鑰+乙方公鑰使用DH提供的對稱密鑰的生成方式産生對稱密鑰;乙方生成是通過乙方私鑰+甲方公鑰使用DH提供的對稱密鑰的生成方式産生對稱密鑰

關鍵點:甲方需要公布自己的公鑰給乙方,乙方生成需要使用此公鑰;無法抵擋中間人攻擊

密鑰長度:512-1024位

密鑰預設長度:1024位

工作模式:無

填充方式:無

JDK6.0提供了實作

非對稱加密至RSA

JDK6.0提供了RSA加密算法的實作

在RSA算法中,公鑰既可以用于解密,也可以用于加密,私鑰也是如此。但是公鑰加密隻能私鑰解密,反正私鑰加密隻能公鑰解密。

對于JDK與 Bouncy Castle的實作如下

JAVA加密與解密

<a href="https://www.zhihu.com/question/35137387">https://www.zhihu.com/question/35137387</a>