import java.security.Key;
import java.security.SecureRandom;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;public classDesUtil {/**
* ALGORITHM 算法
* 可替换为以下任意一种算法,同时key值的size相应改变。
*
*
*
* DES key size must be equal to 56
* DESede(TripleDES) key size must be equal to 112 or 168
* AES key size must be equal to 128, 192 or 256,but 192 and 256 bits may not be available
* Blowfish key size must be multiple of 8, and can only range from 32 to 448 (inclusive)
* RC2 key size must be between 40 and 1024 bits
* RC4(ARCFOUR) key size must be between 40 and 1024 bits
*
*
* 在Key toKey(byte[] key)方法中使用下述代码
* SecretKey secretKey = new SecretKeySpec(key, ALGORITHM);
替换
*
* DESKeySpec dks = new DESKeySpec(key);
* SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(ALGORITHM);
* SecretKey secretKey = keyFactory.generateSecret(dks);
* */
public static final String ALGORITHM = "TripleDES";/**
* 转换密钥
*
* @param key
* @return
* @throws Exception*/
private static Key toKey(byte[] key) throws Exception {//DESKeySpec dks = new DESKeySpec(key);//SecretKeyFactory keyFactory =//SecretKeyFactory.getInstance(ALGORITHM);//SecretKey secretKey = keyFactory.generateSecret(dks);//当使用其他对称加密算法时,如AES、Blowfish等算法时,用下述代码替换上述三行代码
SecretKey secretKey = newSecretKeySpec(key, ALGORITHM);returnsecretKey;
}/**
* 解密
*
* @param data
* @param key
* @return
* @throws Exception*/
public static byte[] decrypt(byte[] data, String key) throws Exception {
Key k=toKey(Base64Util.decryptBASE64(key));
Cipher cipher=Cipher.getInstance(ALGORITHM);
cipher.init(Cipher.DECRYPT_MODE, k);returncipher.doFinal(data);
}/**
* 加密
*
* @param data
* @param key
* @return
* @throws Exception*/
public static byte[] encrypt(byte[] data, String key) throws Exception {
Key k=toKey(Base64Util.decryptBASE64(key));
Cipher cipher=Cipher.getInstance(ALGORITHM);
cipher.init(Cipher.ENCRYPT_MODE, k);returncipher.doFinal(data);
}/**
* 生成密钥
*
* @return
* @throws Exception*/
public staticString initKey() throws Exception {return initKey(null);
}/**
* 生成密钥
*
* @param seed
* @return
* @throws Exception*/
public staticString initKey(String seed) throws Exception {
SecureRandom secureRandom= null;if (seed != null) {
secureRandom= newSecureRandom(Base64Util.decryptBASE64(seed));
}else{
secureRandom= newSecureRandom();
}
KeyGenerator kg=KeyGenerator.getInstance(ALGORITHM);
kg.init(secureRandom);
SecretKey secretKey=kg.generateKey();returnBase64Util.encryptBASE64(secretKey.getEncoded());
}public static voidmain(String args[]) {
String inputStr= "DES哈哈哈>=《》销毁!@#$%^&*";try{
String key=DesUtil.initKey();
System.err.println("原文:\t" +inputStr);
System.err.println("密钥:\t" +key);//byte[] inputData = inputStr.getBytes();//inputData = DesUtil.encrypt(inputData, key);//System.err.println("加密后:\t" + Base64Util.encryptBASE64(inputData));//byte[] outputData = DesUtil.decrypt(inputData, key);//String outputStr = new String(outputData);//System.err.println("解密后:\t" + outputStr);
} catch(Exception e) {
e.printStackTrace();
}
}
}