1. 程式人生 > >Java加解密與數字簽名

Java加解密與數字簽名

對稱 數組 aes 生成密鑰 分解 encode rup 特性 ntc

Java加解密與數字簽名

2016-08-30 蕊蕊 java編程

**

Java加解密

**

實現方式:JDK實現,CC,BC

JDK提供比較基礎的底層的實現;CC提供一些簡化的操作;BC提供補充

一、Base64加密

非常簡單,加密解密就一個函數。

代碼如下:

技術分享圖片

二、消息摘要算法加密————主要用於驗證數據完整性。

MD(消息摘要):
技術分享圖片

SHA(安全散列)

JDK實現和MD一樣。

BC實現如下:(Digest類)

技術分享圖片

CC實現最簡單(就是一個DigestUtils的靜態方法):
技術分享圖片

MAC(消息認證碼)——含有密鑰的散列函數算法

兼容MD和SHA的特性,但加入了密鑰。

主要JDK和Bouncy Castle實現。

JDK實現:獲取或定義密鑰(byte[]數組),Mac類 實例化、初始化、執行。

BC實現:Hmac類 實例化、初始化、執行。

三、對稱加解密

對稱加密指加密和解密使用相同密鑰的加密算法。這裏將介紹DES、3重DES、AES和PBE幾種常見的對稱加密算法在Java中的實現。

DES、3DES、AES(密鑰)、PBE(口令和鹽)

DES:

JDK實現:生成並轉換Key;Cipher類的實例化(getInstance)、初始化(init選擇模式與Key);執行(doFinal)加解密。

推薦BC實現方式:Security.addProvider(new BouncyCastleProvider());

然後剩下的代碼就可以和JDK實現代碼基本一樣了。

3DES、AES實現基本一樣,所以就不一一介紹。。。

PBE(基於口令的加密)

特點:通過 salt + 口令

實現:初始化鹽;生成口令;Cipher類加解密。

四、非對稱加解密

非對稱加密算法是一種基於密鑰的保密方法,需要公開密鑰和私有密鑰,在文件加密、尤其是網銀中應用廣泛。這裏主要介紹非對稱加密算法的實現過程,DH、RSA和ELGamal等幾種常見的非對稱加密算法的在Java中的應用。

概念:公鑰、私鑰;

DH(密鑰交換算法):

代碼實現有些麻煩

——初始化發送方密鑰

-KeyPairGenerator :能產生KeyPair

-KeyPair :常用的密鑰載體,稱為密鑰對,分為公鑰PublicKey與私鑰PrivateKey。

-PublicKey

——初始化接收方密鑰

-KeyFactory :密鑰工廠,生成密鑰,通過某種密鑰的規範來還原密鑰

-X509EncodedKeySpec :根據ASN.1進行密鑰編碼

-DHPublicKey :

-DHParameterSpec :遵從DH算法發參數的集合

-KeyPairGenerator :

-PrivateKey :

——雙發根據公布的對方的PublicKey構建本地密鑰,

——構建出來的本地密鑰是一致的

-KeyAgreement :用來提供密鑰一致性協議

-SecretKey :秘密密鑰,對稱

-KeyFactory -X509EncodedKeySpec -PublicKey

——加密、解密(利用本地密鑰)

-Cipher :為加密和解密提供密碼功能的類

技術分享圖片

解釋:

首先,發送方產生密鑰對,並公開 公鑰;接收方根據這個公鑰產生密鑰對,然後也公開自己的 公鑰。

然後,發送方根據接收方的 公鑰 產生自己本地的密鑰(本地密鑰一般是采用對稱密鑰),接收方也根據發送方的 公鑰 產生自己本地的密鑰。其實,這樣雙方產生的本地密鑰是相同的。

最後,雙方就可以利用本地密鑰進行加解密了。

RSA(基於因子分解):代碼實現較為簡單

初始化密鑰(包含公鑰、密鑰)。

可以利用公鑰加密,私鑰解密;也可以私鑰加密,公鑰解密

使用過程:雙方分別掌握公鑰與私鑰中的一種,然後就可以加密並傳輸數據了。

技術分享圖片

技術分享圖片

技術分享圖片

EIGamal(基於離散因數)

JDK沒有實現,只能利用BC實現。

首先,Security.addProvider(new BouncyCastleProvider());

之後實現類似於RSA。

技術分享圖片

五.Java實現數字簽名

數字簽名用於鑒別數字信息,公鑰和私鑰,私鑰對數據簽名,公鑰用於檢驗。

過程為:首先初始化一個密鑰對,在密鑰對的基礎上進行簽名與驗證。

1、RSA:既可以加解密,也可以數字簽名。

初始化密鑰對:KeyPairGenerator、KeyPair、RSAPublic、PSAPrivate;

執行簽名;Signature類

驗證簽名;Signature類

2、DSA(數字簽名算法)

初始化密鑰對,公鑰、私鑰;

執行簽名,用私鑰簽名;

驗證簽名,用公鑰驗證;

3、ECDSA

微軟序列號便是采用的ECDSA算法進行的簽名。速度快,強度高,簽名短。

初始化密鑰對;

執行簽名;

驗證簽名

Java加解密與數字簽名