【Android工具類】比DES加密更安全的算法——3DES加密算法
轉載請注明出處: http://blog.csdn.net/zhaokaiqiang1992
在前面的文章里面,我們討論了DES算法,同時也明白了如何才能保證不同平臺下的加密和解密結果的一致性。但是DES作為出現了很長時間的一種加密算法, 隨著計算機運算能力的加強,DES加密容易被暴力破解,其安全性變得有點低。于是,為了增強數據的安全性,3DES算法就應運而生了。
3DES,顧名思義,就是對DES加密算法的改進,3DES通過對每個數據進行3次DES加密,從而降低被破解的可能性。
如果我們要使用3DES加密,需要以下幾個步驟
①傳入共同約定的密鑰(keyBytes)以及算法(Algorithm),來構建SecretKey密鑰對象
SecretKey deskey = new SecretKeySpec(keyBytes, Algorithm);
②根據算法實例化Cipher對象。它負責加密/解密
Cipher c1 = Cipher.getInstance(Algorithm);
③傳入加密/解密模式以及SecretKey密鑰對象,實例化Cipher對象
c1.init(Cipher.ENCRYPT_MODE, deskey);
④傳入字節數組,調用Cipher.doFinal()方法,實現加密/解密,并返回一個byte字節數組
c1.doFinal(src);
具體的代碼實現過程如下
package com.qust;import java.io.UnsupportedEncodingException; import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec; /** * * @ClassName: com.qust.SecretUtils * @Description: 3DES加密解密工具類 * @author zhaokaiqiang * @date 2014-11-13 下午11:28:14 * */ public class DES3Utils { // 定義加密算法,DESede即3DES private static final String Algorithm = "DESede"; // 加密密鑰 private static final String PASSWORD_CRYPT_KEY = "zhaokaiqiang1992"; /** * 加密方法 * * @param src * 源數據的字節數組 * @return */ public static byte[] encryptMode(byte[] src) { try { // 生成密鑰 SecretKey deskey = new SecretKeySpec( build3DesKey(PASSWORD_CRYPT_KEY), Algorithm); // 實例化Cipher Cipher cipher = Cipher.getInstance(Algorithm); cipher.init(Cipher.ENCRYPT_MODE, deskey); return cipher.doFinal(src); } catch (java.security.NoSuchAlgorithmException e1) { e1.printStackTrace(); } catch (javax.crypto.NoSuchPaddingException e2) { e2.printStackTrace(); } catch (java.lang.Exception e3) { e3.printStackTrace(); } return null; } /** * 解密函數 * * @param src * 密文的字節數組 * @return */ public static byte[] decryptMode(byte[] src) { try { SecretKey deskey = new SecretKeySpec( build3DesKey(PASSWORD_CRYPT_KEY), Algorithm); Cipher c1 = Cipher.getInstance(Algorithm); c1.init(Cipher.DECRYPT_MODE, deskey); return c1.doFinal(src); } catch (java.security.NoSuchAlgorithmException e1) { e1.printStackTrace(); } catch (javax.crypto.NoSuchPaddingException e2) { e2.printStackTrace(); } catch (java.lang.Exception e3) { e3.printStackTrace(); } return null; } /** * 根據字符串生成密鑰24位的字節數組 * * @param keyStr * @return * @throws UnsupportedEncodingException */ public static byte[] build3DesKey(String keyStr) throws UnsupportedEncodingException { byte[] key = new byte[24]; byte[] temp = keyStr.getBytes("UTF-8"); if (key.length > temp.length) { System.arraycopy(temp, 0, key, 0, temp.length); } else { System.arraycopy(temp, 0, key, 0, key.length); } return key; } } </pre>
測試類的代碼如下package com.qust;public class Main { public static void main(String[] args) { String msg = "使用3DES對數據進行加密"; System.out.println("【加密前】:" + msg); // 加密 byte[] secretArr = DES3Utils.encryptMode(msg.getBytes()); System.out.println("【加密后】:" + new String(secretArr)); // 解密 byte[] myMsgArr = DES3Utils.decryptMode(secretArr); System.out.println("【解密后】:" + new String(myMsgArr)); } } </pre>
本文由用戶 ph44 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!