欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java實現DES加解密算法解析

 更新時間:2016年10月19日 16:29:06   作者:genuinecx  
這篇文章主要介紹了Java實現DES加解密算法解析,結合完整實例形式分析了DES加密的相關原理,需要的朋友可以參考下。

本文實例講述了Java實現DES加解密算法解析。分享給大家供大家參考,具體如下:
 

簡介:

數據加密算法(Data Encryption Algorithm,DEA)是一種對稱加密算法,很可能是使用最廣泛的密鑰系統,特別是在保護金融數據的安全中,最初開發(fā)的DEA是嵌入硬件中的。通常,自動取款機(Automated Teller Machine,ATM)都使用DEA。它出自IBM的研究工作,IBM也曾對它擁有幾年的專利權,但是在1983年已到期后,處于公有范圍中,允許在特定條件下可以免除專利使用費而使用。1977年被美國政府正式采納。

1998年后實用化DES破譯機的出現徹底宣告DES算法已不具備安全性,1999年NIST頒布新標準,規(guī)定DES算法只能用于遺留加密系統,但不限制使用DESede算法。當今DES算法正是推出歷史舞臺,AES算法稱為他的替代者。

加密原理:

DES 使用一個 56 位的密鑰以及附加的 8 位奇偶校驗位,產生最大 64 位的分組大小。這是一個迭代的分組密碼,使用稱為 Feistel 的技術,其中將加密的文本塊分成兩半。使用子密鑰對其中一半應用循環(huán)功能,然后將輸出與另一半進行“異或”運算;接著交換這兩半,這一過程會繼續(xù)下去,但 最后一個循環(huán)不交換。DES 使用 16 個循環(huán),使用異或,置換,代換,移位操作四種基本運算。

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();
    // 從原始密匙數據創(chuàng)建DESKeySpec對象
    DESKeySpec dks = new DESKeySpec(key);
    // 創(chuàng)建一個密匙工廠,然后用它把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);
    // 正式執(zhí)行加密操作
    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();
    // 從原始密匙數據創(chuàng)建一個DESKeySpec對象
    DESKeySpec dks = new DESKeySpec(key);
    // 創(chuàng)建一個密匙工廠,然后用它把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);
       
    // 正式執(zhí)行解密操作
    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加解密算法解析內容就給大家介紹到這里了。希望大家繼續(xù)關注我們的網站!想要學習java可以繼續(xù)關注本站。

相關文章

  • Mybatis之typeAlias配置的3種方式小結

    Mybatis之typeAlias配置的3種方式小結

    這篇文章主要介紹了Mybatis之typeAlias配置的3種方式小結,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • java?Spring?Boot的介紹與初體驗

    java?Spring?Boot的介紹與初體驗

    大家好,本篇文章主要講的是java?Spring?Boot的介紹與初體驗,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-01-01
  • Mybatis持久層框架入門之CRUD實例代碼詳解

    Mybatis持久層框架入門之CRUD實例代碼詳解

    這篇文章主要介紹了Mybatis持久層框架入門之CRUD實例,需要的朋友可以參考下
    2022-05-05
  • Spring Security實現身份認證和授權的示例代碼

    Spring Security實現身份認證和授權的示例代碼

    在 Spring Boot 應用中使用 Spring Security 可以非常方便地實現用戶身份認證和授權,本文主要介紹了Spring Security實現身份認證和授權的示例代碼,感興趣的可以了解一下
    2023-06-06
  • 一篇文章帶你詳解Spring的AOP

    一篇文章帶你詳解Spring的AOP

    這篇文章主要為大家介紹了Spring的AOP,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • mybatis-plus自帶QueryWrapper自定義sql實現復雜查詢實例詳解

    mybatis-plus自帶QueryWrapper自定義sql實現復雜查詢實例詳解

    MyBatis-Plus是一個MyBatis(opens new window)的增強工具,在 MyBatis的基礎上只做增強不做改變,MyBatis可以無損升級為MyBatis-Plus,這篇文章主要給大家介紹了關于mybatis-plus自帶QueryWrapper自定義sql實現復雜查詢的相關資料,需要的朋友可以參考下
    2022-10-10
  • windows下 jdk1.7安裝教程圖解

    windows下 jdk1.7安裝教程圖解

    java編程的初學者在開始編碼前都會遇到一個難題,那就是jdk1.7環(huán)境變量配置怎么操作,怎么安裝,針對這個難題,小編特地為大家整理相關教程,不了解的朋友可以前往查看使用
    2018-05-05
  • Springboot+QueryDsl實現融合數據查詢

    Springboot+QueryDsl實現融合數據查詢

    這篇文章主要將介紹的是 Springboot 使用 QueryDsl 實現融合數據查詢,文中有詳細的代碼講解,對 SpringBoot?Querydsl?查詢操作感興趣的朋友一起看看吧
    2023-08-08
  • 如何實現廣告彈窗觸達頻率的控制?

    如何實現廣告彈窗觸達頻率的控制?

    這篇文章主要介紹了如何實現廣告彈窗觸達頻率的控制,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-04-04
  • SpringBoot結合JWT實現用戶登錄、注冊、鑒權

    SpringBoot結合JWT實現用戶登錄、注冊、鑒權

    用戶登錄、注冊及鑒權是我們基本所有系統必備的,也是很核心重要的一塊,本文主要介紹了SpringBoot結合JWT實現用戶登錄、注冊、鑒權,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2023-05-05

最新評論