package me.test.jdk.javax.crypto;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import javax.crypto.*;
import javax.xml.bind.DatatypeConverter;
import java.io.UnsupportedEncodingException;
import java.security.InvalidAlgorithmParameterException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.Security;
// NOT USING "Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files 6"
// http://bouncycastle.org/wiki/display/JA1/Provider+Installation
// http://docs.oracle.com/javase/7/docs/technotes/guides/security/StandardNames.html
public class DESTest {
public static void main(String[] args) throws InterruptedException, UnsupportedEncodingException,
NoSuchPaddingException, NoSuchAlgorithmException, InvalidAlgorithmParameterException,
InvalidKeyException, BadPaddingException, IllegalBlockSizeException {
// 请注意避免重复加入
Security.addProvider(new BouncyCastleProvider());
// 生成随机秘钥
KeyGenerator keygenerator = KeyGenerator.getInstance("DES");
SecretKey desKey = keygenerator.generateKey();
// 生成加密器
Cipher cipher = Cipher.getInstance("DES/ECB/PKCS7Padding");
cipher.init(Cipher.ENCRYPT_MODE, desKey);
// 准备明文数据
String txt = "Hello World~";
// 加密
byte[] encData = cipher.doFinal(txt.getBytes("UTF-8"));
System.out.println("ENC DATA : " + DatatypeConverter.printHexBinary(encData));
// 解密
cipher.init(Cipher.DECRYPT_MODE, desKey);
byte[] decData = cipher.doFinal(encData);
System.out.println("DEC DATA : " + new String(decData, "UTF-8"));
}
}