當前位置:編程學習大全網 - 源碼下載 - 漫談Java加密技術(二)

漫談Java加密技術(二)

 接下來我們介紹對稱加密算法 最常用的莫過於DES數據加密算法

  DES

 DES Data Encryption Standard 即數據加密算法 是IBM公司於 年研究成功並公開發表的 DES算法的入口參數有三個 Key Data Mode 其中Key為 個字節*** 位 是DES算法的工作密鑰 Data也為 個字節 位 是要被加密或被解密的數據 Mode為DES的工作方式 有兩種 加密或解密

 DES算法把 位的明文輸入塊變為 位的密文輸出塊 它所使用的密鑰也是 位

 通過java代碼實現如下

  import?java security Key;import?java security SecureRandom;?import?javax crypto Cipher;import?javax crypto KeyGenerator;import?javax crypto SecretKey;import?javax crypto SecretKeyFactory;import?javax crypto spec DESKeySpec;/**?*//***?DES安全編碼組件?author?by?;?**?<pre>*?支持?DES DESede(TripleDES 就是 DES) AES Blowfish RC RC (ARCFOUR)*?DES?key?size?must?be?equal?to? *?DESede(TripleDES)key?size?must?be?equal?to or? *?AES?key?size?must?be?equal?to ?or? but and bits?may?not?be?available*?Blowfish?key?size?must?be?multiple?of and?can?only?range?from to (inclusive)*?RC ?key?size?must?be?beeen and bits*?RC (ARCFOUR)?key?size?must?be?beeen and bits*?具體內容?需要關註?JDK?Document&///docs/technotes/guides/security/l*?</pre>**?@author?梁棟*?@version? *?@since? */?public?abstract?class?DESCoder?extends?Coder?{/**?*//***?ALGORITHM?算法?<br>*?可替換為以下任意壹種算法 同時key值的size相應改變 **?<pre>*?DES?key?size?must?be?equal?to? *?DESede(TripleDES)key?size?must?be?equal?to or? *?AES?key?size?must?be?equal?to ?or? but and bits?may?not?be?available*?Blowfish?key?size?must?be?multiple?of and?can?only?range?from to (inclusive)*?RC ?key?size?must?be?beeen and bits*?RC (ARCFOUR)?key?size?must?be?beeen and bits*?</pre>**?在Key?toKey(byte[]?key)方法中使用下述代碼*?<code>SecretKey?secretKey?=?new?SecretKeySpec(key ?ALGORITHM);</code>?替換*?<code>*?DESKeySpec?dks?=?new?DESKeySpec(key);*?SecretKeyFactory?keyFactory?=?SecretKeyFactory getInstance(ALGORITHM);*?SecretKey?secretKey?=?keyFactory generateSecret(dks);*?</code>*/?public?static?final?String?ALGORITHM?=? DES ;?/**?*//***?轉換密鑰<br>**?@param?key*?@return*?@throws?Exception*/?private?static?Key?toKey(byte[]?key)?throws?Exception?{DESKeySpec?dks?=?new?DESKeySpec(key);SecretKeyFactory?keyFactory?=?SecretKeyFactory getInstance(ALGORITHM);SecretKey?secretKey?=?keyFactory generateSecret(dks);?//?當使用其他對稱加密算法時 如AES Blowfish等算法時 用下述代碼替換上述三行代碼//?SecretKey?secretKey?=?new?SecretKeySpec(key ?ALGORITHM);?return?secretKey;}?/**?*//***?解密**?@param?data*?@param?key*?@return*?@throws?Exception*/?public?static?byte[]?decrypt(byte[]?data ?String?key)?throws?Exception?{Key?k?=?toKey(decryptBASE (key));?Cipher?cipher?=?Cipher getInstance(ALGORITHM);cipher init(Cipher DECRYPT_MODE ?k);?return?cipher doFinal(data);}?/**?*//***?加密**?@param?data*?@param?key*?@return*?@throws?Exception*/?public?static?byte[]?encrypt(byte[]?data ?String?key)?throws?Exception?{Key?k?=?toKey(decryptBASE (key));Cipher?cipher?=?Cipher getInstance(ALGORITHM);cipher init(Cipher ENCRYPT_MODE ?k);?return?cipher doFinal(data);}?/**?*//***?生成密鑰**?@return*?@throws?Exception*/?public?static?String?initKey()?throws?Exception?{return?initKey(null);}?/**?*//***?生成密鑰**?@param?seed*?@return*?@throws?Exception*/?public?static?String?initKey(String?seed)?throws?Exception?{SecureRandom?secureRandom?=?null;?if?(seed?!=?null)?{secureRandom?=?new?SecureRandom(decryptBASE (seed));}?else?{secureRandom?=?new?SecureRandom();}?KeyGenerator?kg?=?KeyGenerator getInstance(ALGORITHM);kg init(secureRandom);?SecretKey?secretKey?=?kg generateKey();?return?encryptBASE (secretKey getEncoded());}}

 延續上壹個類的實現 我們通過MD 以及SHA對字符串加密生成密鑰 這是比較常見的密鑰生成方式

 再給出壹個測試類

  import?static? junit Assert *;?import? junit Test;?/**?*//****?@author?by?;;?*?@version? *?@since? */?public?class?DESCoderTest?{?@Test?public?void?test()?throws?Exception?{String?inputStr?=? DES ;String?key?=?DESCoder initKey();System err println( 原文:\t ?+?inputStr);?System err println( 密鑰:\t ?+?key);?byte[]?inputData?=?inputStr getBytes();inputData?=?DESCoder encrypt(inputData ?key);?System err println( 加密後:\t ?+?DESCoder encryptBASE (inputData));?byte[]?outputData?=?DESCoder decrypt(inputData ?key);String?outputStr?=?new?String(outputData);?System err println( 解密後:\t ?+?outputStr);?assertEquals(inputStr ?outputStr);}}

 得到的輸出內容如下

 原文 DES

 密鑰 f wEtRrV q =

 加密後 C qe oNIzRY=

 解密後 DES

 由控制臺得到的輸出 我們能夠比對加密 解密後結果壹致 這是壹種簡單的加密解密方式 只有壹個密鑰

 其實DES有很多同胞兄弟 如DESede(TripleDES) AES Blowfish RC RC (ARCFOUR) 這裏就不過多闡述了 大同小異 只要換掉ALGORITHM換成對應的值 同時做壹個代碼替換SecretKey secretKey = new SecretKeySpec(key ALGORITHM) 就可以了 此外就是密鑰長度不同了

 /**

lishixinzhi/Article/program/Java/gj/201311/27624

  • 上一篇:kettle怎樣連接數據庫連接
  • 下一篇:行程軌跡查詢怎麽查
  • copyright 2024編程學習大全網