本文實例講述了Java實現DES加解密算法解析。分享給大家供大家參考,具體如下:
簡介:
數據加密算法(Data Encryption Algorithm,DEA)是一種對稱加密算法,很可能是使用最廣泛的密鑰系統,特別是在保護金融數據的安全中,最初開發的DEA是嵌入硬件中的。通常,自動取款機(Automated Teller Machine,ATM)都使用DEA。它出自IBM的研究工作,IBM也曾對它擁有幾年的專利權,但是在1983年已到期後,處於公有範圍中,允許在特定條件下可以免除專利使用費而使用。 1977年被美國政府正式採納。
1998年後實用化DES破譯機的出現徹底宣告DES算法已不具備安全性,1999年NIST頒布新標準,規定DES算法只能用於遺留加密系統,但不限制使用DESede算法。當今DES算法正是推出歷史舞台,AES算法稱為他的替代者。
加密原理:
DES 使用一個56 位的密鑰以及附加的8 位奇偶校驗位,產生最大64 位的分組大小。這是一個迭代的分組密碼,使用稱為Feistel 的技術,其中將加密的文本塊分成兩半。使用子密鑰對其中一半應用循環功能,然後將輸出與另一半進行“異或”運算;接著交換這兩半,這一過程會繼續下去,但最後一個循環不交換。 DES 使用16 個循環,使用異或,置換,代換,移位操作四種基本運算。
JDK對DES算法的支持
密鑰長度:56位
工作模式:ECB/CBC/PCBC/CTR/CTS/CFB/CFB8 to CFB128/OFB/OBF8 to OFB128
填充方式:Nopadding/PKCS5Padding/ISO10126Padding/
Java 加密解密之對稱加密算法DESede
DESede 即三重DES加密算法,也被稱為3DES或者Triple DES。使用三(或兩)個不同的密鑰對數據塊進行三次(或兩次)DES加密(加密一次要比進行普通加密的三次要快)。三重DES的強度大約和112- bit的密鑰強度相當。通過迭代次數的提高了安全性,但同時也造成了加密效率低的問題。正因DESede算法效率問題,AES算法誕生了。
到目前為止,還沒有人給出攻擊三重DES的有效方法。對其密鑰空間中密鑰進行蠻幹搜索,那麼由於空間太大,這實際上是不可行的。若用差分攻擊的方法,相對於單一DES來說複雜性以指數形式增長。
三重DES有四種模型
Java對DES算法的加密代碼
package com.favccxx.codelib;import java.security.SecureRandom;import javax.crypto.Cipher;import javax.crypto.SecretKey;import javax.crypto.SecretKeyFactory;import javax.crypto.spec.DESKeySpec;public class EncryptCoder { private final static String DES = "DES"; public static byte[] encrypt(byte[] src, byte[] key) throws Exception { // DES算法要求有一個可信任的隨機數源SecureRandom sr = new SecureRandom(); // 從原始密匙數據創建DESKeySpec對象DESKeySpec dks = new DESKeySpec(key); // 創建一個密匙工廠,然後用它把DESKeySpec轉換成一個SecretKey對象SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES); SecretKey securekey = keyFactory.generateSecret(dks); // Cipher對象實際完成加密操作Cipher cipher = Cipher.getInstance(DES); // 用密匙初始化Cipher對象cipher.init(Cipher.ENCRYPT_MODE, securekey, sr); // 正式執行加密操作return cipher.doFinal(src); } /** * * @param password 密碼* @param key 加密字符串* @return */ public final static String encrypt(String password, String key) { try { return byte2String(encrypt(password.getBytes(), key.getBytes())); } catch (Exception e) { } return null; } public static String byte2String(byte[] b) { String hs = ""; String stmp = ""; for (int n = 0; n < b.length; n++) { stmp = (java.lang.Integer.toHexString(b[n] & 0XFF)); if (stmp.length() == 1) hs = hs + "0" + stmp; else hs = hs + stmp; } return hs.toUpperCase(); } public static void main(String[] args){ String encryptString = encrypt("is張三豐","test中英文雜七爛八混搭@123654{"); System.out.println(encryptString); } //輸出:B00542E93695F4CFCE34FC4393C2F4BF } Java對DES解密算法的實現
package com.favccxx.codelib;import java.security.SecureRandom;import javax.crypto.Cipher;import javax.crypto.SecretKey;import javax.crypto.SecretKeyFactory;import javax.crypto.spec.DESKeySpec;public class DescryptCoder { private final static String DES = "DES"; /** * * @param src 數據源* @param key 密鑰,長度必須是8的倍數* @return * @throws Exception */ public static byte[] decrypt(byte[] src, byte[] key) throws Exception { // DES算法要求有一個可信任的隨機數源SecureRandom sr = new SecureRandom(); // 從原始密匙數據創建一個DESKeySpec對象DESKeySpec dks = new DESKeySpec(key); // 創建一個密匙工廠,然後用它把DESKeySpec對象轉換成一個SecretKey對象SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES); SecretKey securekey = keyFactory.generateSecret(dks); // Cipher對象實際完成解密操作Cipher cipher = Cipher.getInstance(DES); // 用密匙初始化Cipher對象cipher.init(Cipher.DECRYPT_MODE, securekey, sr); // 正式執行解密操作return cipher.doFinal(src); } public final static String decrypt(String data, String key) { try { return new String(decrypt(String2byte(data.getBytes()), key.getBytes())); } catch (Exception e) { e.printStackTrace(); } return null; } public static byte[] String2byte(byte[] b) { if ((b.length % 2) != 0) throw new IllegalArgumentException("長度不是偶數"); byte[] b2 = new byte[b.length / 2]; for (int n = 0; n < b.length; n += 2) { String item = new String(b, n, 2); b2[n / 2] = (byte) Integer.parseInt(item, 16); } return b2; } public static void main(String[] args){ String desencryptString = decrypt("B00542E93695F4CFCE34FC4393C2F4BF","test中英文雜七爛八混搭@123654"); System.out.println(desencryptString); } //輸出:is張三豐}希望本文所述對你有所幫助,Java實現DES加解密算法解析內容就給大家介紹到這裡了。希望大家繼續關注我們的網站!想要學習java可以繼續關注本站。