日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

在Java中使用DES加密解密算法

發布時間:2025/3/15 java 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 在Java中使用DES加密解密算法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

import javax.crypto.*;

  import javax.crypto.spec.DESKeySpec;

  import java.security.NoSuchAlgorithmException;

  import java.security.InvalidKeyException;

  import java.security.SecureRandom;

  import java.security.spec.InvalidKeySpecException;

  /**

  * 通過DES加密解密實現一個String字符串的加密和解密.

  *

  * @author badpeas

  *

  */

  public class EncryptDecryptData {

  public static void main(String[] args) throws NoSuchAlgorithmException,

  InvalidKeyException, NoSuchPaddingException,

  InvalidKeySpecException, IllegalBlockSizeException,

  BadPaddingException {

  // 1.1 >>> 首先要創建一個密匙

  // DES算法要求有一個可信任的隨機數源

  SecureRandom sr = new SecureRandom();

  // 為我們選擇的DES算法生成一個KeyGenerator對象

  KeyGenerator kg = KeyGenerator.getInstance("DES");

  kg.init(sr);

  // 生成密匙

  SecretKey key = kg.generateKey();

  // 獲取密匙數據

  byte rawKeyData[] = key.getEncoded();

  System.out.println("密匙===>" + rawKeyData);

  String str = "hi.baidu.com/badpeas"; // 待加密數據

  // 2.1 >>> 調用加密方法

  byte[] encryptedData = encrypt(rawKeyData, str);

  // 3.1 >>> 調用解密方法

  decrypt(rawKeyData, encryptedData);

  }

  /**

  * 加密方法

  *

  * @param rawKeyData

  * @param str

  * @return

  * @throws InvalidKeyException

  * @throws NoSuchAlgorithmException

  * @throws IllegalBlockSizeException

  * @throws BadPaddingException

  * @throws NoSuchPaddingException

  * @throws InvalidKeySpecException

  */

  public static byte[] encrypt(byte rawKeyData[], String str)

  throws InvalidKeyException, NoSuchAlgorithmException,

  IllegalBlockSizeException, BadPaddingException,

  NoSuchPaddingException, InvalidKeySpecException {

  // DES算法要求有一個可信任的隨機數源

  SecureRandom sr = new SecureRandom();

  // 從原始密匙數據創建一個DESKeySpec對象

  DESKeySpec dks = new DESKeySpec(rawKeyData);

  // 創建一個密匙工廠,然后用它把DESKeySpec轉換成一個SecretKey對象

  SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");

  SecretKey key = keyFactory.generateSecret(dks);

// Cipher對象實際完成加密操作

  Cipher cipher = Cipher.getInstance("DES");

  // 用密匙初始化Cipher對象

  cipher.init(Cipher.ENCRYPT_MODE, key, sr);

  // 現在,獲取數據并加密

  byte data[] = str.getBytes();

  // 正式執行加密操作

  byte[] encryptedData = cipher.doFinal(data);

  System.out.println("加密后===>" + encryptedData);

  return encryptedData;

  }

  /**

  * 解密方法

  *

  * @param rawKeyData

  * @param encryptedData

  * @throws IllegalBlockSizeException

  * @throws BadPaddingException

  * @throws InvalidKeyException

  * @throws NoSuchAlgorithmException

  * @throws NoSuchPaddingException

  * @throws InvalidKeySpecException

  */

  public static String decrypt(byte rawKeyData[], byte[] encryptedData)

  throws IllegalBlockSizeException, BadPaddingException,

  InvalidKeyException, NoSuchAlgorithmException,

  NoSuchPaddingException, InvalidKeySpecException {

  // DES算法要求有一個可信任的隨機數源

  SecureRandom sr = new SecureRandom();

  // 從原始密匙數據創建一個DESKeySpec對象

  DESKeySpec dks = new DESKeySpec(rawKeyData);

  // 創建一個密匙工廠,然后用它把DESKeySpec對象轉換成一個SecretKey對象

  SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");

  SecretKey key = keyFactory.generateSecret(dks);

  // Cipher對象實際完成解密操作

  Cipher cipher = Cipher.getInstance("DES");

  // 用密匙初始化Cipher對象

  cipher.init(Cipher.DECRYPT_MODE, key, sr);

  // 正式執行解密操作

  byte decryptedData[] = cipher.doFinal(encryptedData);

  System.out.println("解密后===>" + new String(decryptedData));

  return new String(decryptedData);

  }

  }

  ---------------無奈的分割線---------------

  上面的代碼非常清楚,我在工作中問了實現一個url里面的數據加密和解密的操作就完成了上面的代碼,原代碼來源于網上,經過修改然后加上注釋,是直接可以運行的,有什么不懂得請在后面跟帖.

  這個是最簡單的加密解密了,但是在一般情況下作用是非常大的,還有一個基于MD5的加密解密是以前做信用卡支付時做的,還沒時間整理,以后發上來吧!

  謝謝在網上無私奉獻的coder,致敬!

  PS: 剛同事提出來,密匙不能在URL間傳遞,這樣暴露了信息,想想也對,那就把密匙寫死吧.

  在加密之前??? byte rawKeyData[] = "429387498234".getBytes();

  這樣解密方法里面也寫死??? byte rawKeyData[] = "429387498234".getBytes();

  調用解密方法就直接: decrypt(encryptedData);?? 就可以了!

  這個密碼也能寫道項目的配置文件里面,以便隨時更改!

轉載于:https://www.cnblogs.com/duanxz/archive/2012/12/21/2828264.html

總結

以上是生活随笔為你收集整理的在Java中使用DES加密解密算法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。