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算法進行的簽名。速度快,強度高,簽名短。 

初始化密鑰對; 

執行簽名; 

驗證簽名


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM