实现方式如下
- 需要jar包 bcprov-jdk14-134.jar
代码
package com.itlaobing.date;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.PBEKeySpec;
import javax.crypto.spec.PBEParameterSpec;
import org.bouncycastle.util.encoders.Hex;
public class SecurityServiceImpl {
/**
* 解密方法
* @param bytes
* @return
* @throws Exception
*/
public String decrypt(byte[] bytes) throws Exception {
//"authcode-encrypt"为口令
PBEKeySpec keySpec = new PBEKeySpec("authcode-encrypt".toCharArray());
SecretKeyFactory keyFac = SecretKeyFactory.getInstance("PBEWithMD5AndDES");
SecretKey key = keyFac.generateSecret(keySpec);
//"ADTECCAS"为盐值,必为8个字符
String salt = new String("ADTECCAS");
//迭代次数为1000
PBEParameterSpec ParamSpec = new PBEParameterSpec(salt.getBytes(), 1000);
//加密算法是"PBEWithMD5AndDES"
Cipher cipher = Cipher.getInstance("PBEWithMD5AndDES");
cipher.init(Cipher.DECRYPT_MODE, key, ParamSpec);
return new String(cipher.doFinal(Hex.decode(bytes)));
}
/**
* 加密方法
* @param str
* @return
* @throws Exception
*/
public byte[] encrypt(String str) throws Exception {
PBEKeySpec keySpec = new PBEKeySpec("authcode-encrypt".toCharArray());
SecretKeyFactory keyFac = SecretKeyFactory.getInstance("PBEWithMD5AndDES");
SecretKey key = keyFac.generateSecret(keySpec);
//"ADTECCAS"为盐值,必为8个字符
String salt = new String("ADTECCAS");
//迭代次数为1000
PBEParameterSpec ParamSpec = new PBEParameterSpec(salt.getBytes(), 1000);
//加密算法是"PBEWithMD5AndDES"
Cipher cipher = Cipher.getInstance("PBEWithMD5AndDES");
cipher.init(Cipher.ENCRYPT_MODE, key, ParamSpec);
return Hex.encode(cipher.doFinal(str.getBytes()));
}
public static void main(String args[]){
//对 123456加密
String str = "123456";
try {
byte[] b = new SecurityServiceImpl().encrypt(str);
System.out.println("加密后的密码为:"+new String(b));
System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
String str1 = "fdcd974dc4ba43b1277c33369540e0cc";
String str2 = "f8bb545c46f3ad547eff741be4902d3a";
byte[] d = str2.getBytes();
System.out.println("str2解密之后为:"+new SecurityServiceImpl().decrypt(d));
} catch (Exception e) {
e.printStackTrace();
}
}
}