首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java DES 對稱加密算法完整封裝與使用範例:加密、解密工具類及十六進制輸出示例

     編輯:Java 相關知識

DES 加密工具類

package org.jtool.desutils;

import java.security.SecureRandom;
import javax.crypto.*;
import javax.crypto.spec.DESKeySpec;

public class DESEncrypt {
    private byte[] desKey;

    public DESEncrypt(byte[] desKey) {
        this.desKey = desKey;
    }

    public byte[] doEncrypt(byte[] plainText) throws Exception {
        SecureRandom sr = new SecureRandom();
        DESKeySpec dks = new DESKeySpec(desKey);
        SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
        SecretKey key = keyFactory.generateSecret(dks);
        Cipher cipher = Cipher.getInstance("DES");
        cipher.init(Cipher.ENCRYPT_MODE, key, sr);
        return cipher.doFinal(plainText);
    }
}

DES 解密工具類

package org.jtool.desutils;

import java.security.SecureRandom;
import javax.crypto.*;
import javax.crypto.spec.DESKeySpec;

public class DESDecrypt {
    private byte[] desKey;

    public DESDecrypt(byte[] desKey) {
        this.desKey = desKey;
    }

    public byte[] doDecrypt(byte[] encryptText) throws Exception {
        SecureRandom sr = new SecureRandom();
        DESKeySpec dks = new DESKeySpec(desKey);
        SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
        SecretKey key = keyFactory.generateSecret(dks);
        Cipher cipher = Cipher.getInstance("DES");
        cipher.init(Cipher.DECRYPT_MODE, key, sr);
        return cipher.doFinal(encryptText);
    }
}

綜合測試範例

package org.jtool.desutils;

public class DESTest {
    public static void main(String[] args) throws Exception {
        String key = "ABCDEFGH";
        String value = "AABBCCDDEE";

        DESEncrypt desEncrypt = new DESEncrypt(key.getBytes());
        byte[] encryptText = desEncrypt.doEncrypt(value.getBytes());
        System.out.println("doEncrypt - " + toHexString(encryptText));
        System.out.println("doEncrypt - " + new String(encryptText));

        DESDecrypt desDecrypt = new DESDecrypt(key.getBytes());
        byte[] decryptText = desDecrypt.doDecrypt(encryptText);
        System.out.println("doDecrypt - " + new String(decryptText));
        System.out.println("doDecrypt - " + toHexString(decryptText));
    }

    public static String toHexString(byte[] value) {
        StringBuilder sb = new StringBuilder();
        for (byte b : value) {
            String hex = Integer.toHexString(b & 0xFF);
            if (hex.length() == 1) sb.append('0');
            sb.append(hex);
        }
        return sb.toString().toUpperCase();
    }
}

關鍵點說明

  • 使用 SecureRandom 提供可信隨機數源
  • 通過 DESKeySpec 与 SecretKeyFactory 構建 SecretKey
  • Cipher 實例完成實際加解密操作
  • 輔助方法 toHexString 將字節數組轉為可讀的十六進制字符串

此封裝可直接用於項目中對敏感數據進行 DES 對稱加密,密鑰長度需為 8 位字節。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved