public class Test
{
private static String Instance="DES/CBC/PKCS5Padding";
private static String InstanceDes="DES";
private static String charsetName="utf-8";
public static void main( String[] args ) throws Exception
{
String test = "02-50-F2-11-11-01";
String key="111qqqwe";//密钥 8位
String ivp="222wwwee";//偏移量8位
String cbcEncrypt = Test.cbcStaticEncrypt(key,ivp,test);
String cbcDecrypt = Test.cbcStaticDecrypt(key,ivp,cbcEncrypt);
System.out.println("DES CBC 加密: " + cbcEncrypt);
System.out.println("DES CBC 解密: " + cbcDecrypt);
}
/**
* DES CBC encrypt
* @param data data to be encrypted
* @param --password encrypt key,length can not less 8 digits
* @param --ivParam Offset
* @return encrypted data
*/
public static String cbcStaticEncrypt(String pwd, String ivP,String data) {
try {
if (pwd== null || pwd.length() < 8) {
throw new RuntimeException("Encryption failed, the key cannot be less than 8 bits");
}
if (data == null) {
return null;
}
Key secretKey = generateKey(pwd);
Cipher cipher = Cipher.getInstance(Instance);
IvParameterSpec iv = new IvParameterSpec(ivP.getBytes(charsetName));
cipher.init(Cipher.ENCRYPT_MODE, secretKey, iv);
byte[] encrypted = cipher.doFinal(data.getBytes(charsetName));
return new BASE64Encoder().encode(encrypted); //BASE64 formate。
} catch (Exception e) {
e.printStackTrace();
return data;
}
}
/**
* DES CBC decode
* @param data data to be decoded
* @param --password decoded key,length can not less 8 digits
* @param --ivParam Offset
* @return decoded data
*/
public static String cbcStaticDecrypt(String pwd, String ivP,String data) {
try {
if (pwd== null || pwd.length() < 8) {
throw new RuntimeException("Decryption failed, the key cannot be less than 8 bits");
}
if (data == null) {
return null;
}
Key secretKey = generateKey(pwd);
Cipher cipher = Cipher.getInstance(Instance);
IvParameterSpec iv = new IvParameterSpec(ivP.getBytes(charsetName));
cipher.init(Cipher.DECRYPT_MODE, secretKey, iv);
byte[] encrypted = new BASE64Decoder().decodeBuffer(data);//base64 decode
byte[] original = cipher.doFinal(encrypted);
return ( new String(original,charsetName) );
} catch (Exception e) {
e.printStackTrace();
return data;
}
}
/**
* generate KEY
* @param password key
* @return generate KEY
* @throws Exception
*/
private static Key generateKey(String password) throws Exception {
DESKeySpec dks = new DESKeySpec(password.getBytes(charsetName));
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(InstanceDes);
return keyFactory.generateSecret(dks);
}
}
结果