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);
}
}
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 構建 SecretKeyCipher 實例完成實際加解密操作toHexString 將字節數組轉為可讀的十六進制字符串此封裝可直接用於項目中對敏感數據進行 DES 對稱加密,密鑰長度需為 8 位字節。