程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java完成DES加解密算法解析

Java完成DES加解密算法解析

編輯:關於JAVA

Java完成DES加解密算法解析。本站提示廣大學習愛好者:(Java完成DES加解密算法解析)文章只能為提供參考,不一定能成為您想要的結果。以下是Java完成DES加解密算法解析正文


本文實例講述了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有四種模子

  • DES-EEE3,應用三個分歧密鑰,次序停止三次加密變換。
  • DES-EDE3,應用三個分歧密鑰,順次停止加密-解密-加密變換。
  • DES-EEE2,個中密鑰K1=K3,次序停止三次加密變換。
  • DES-EDE2, 個中密鑰K1=K3,順次停止加密-解密-加密變換。

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可以持續存眷本站。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved