import java.io.UnsupportedEncodingException;
import java.security.InvalidAlgorithmParameterException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
/**
*
* @创建密钥时要注意你用的是那种128,还是192还是256位 他们对应的密钥长度分别是16/24/32一个中文字符占用2个字节(有些CiperMode不支持192和256位的)
* @IvParameterSpec必须16个字节长度
*/
public class AESUtil {
private static AESUtil instance;
public static AESUtil getInstance() {
if (null == instance) {
instance = new AESUtil();
}
return instance;
}
//加密
public byte[] encrypt(String password, byte[] content) {
byte[] bs = null;
try {
SecretKeySpec key = new SecretKeySpec(password.getBytes(Constant.Charset.UTF_8), Constant.Algorithm.AES);
Cipher cipher = Cipher.getInstance(Constant.CipherMode.AES_CBC_PKCS5Padding);
cipher.init(Cipher.ENCRYPT_MODE, key, new IvParameterSpec(password.getBytes(Constant.Charset.UTF_8)));//IvParameterSpec增加加密算法的强度
bs = Base64Util.getInstance().encode(cipher.doFinal(content));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (NoSuchPaddingException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
e.printStackTrace();
} catch (BadPaddingException e) {
e.printStackTrace();
} catch (InvalidAlgorithmParameterException e) {
e.printStackTrace();
}
return bs;
}
//解密
public byte[] decrypt(String password, byte[] content) {
byte[] bs = null;
try {
SecretKeySpec key = new SecretKeySpec(password.getBytes(Constant.Charset.UTF_8), Constant.Algorithm.AES);
Cipher cipher = Cipher.getInstance(Constant.CipherMode.AES_CBC_PKCS5Padding);
cipher.init(Cipher.DECRYPT_MODE, key, new IvParameterSpec(password.getBytes(Constant.Charset.UTF_8)));
bs = cipher.doFinal(Base64Util.getInstance().decode(content));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (NoSuchPaddingException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
e.printStackTrace();
} catch (BadPaddingException e) {
e.printStackTrace();
} catch (InvalidAlgorithmParameterException e) {
e.printStackTrace();
}
return bs;
}
}
AES 加密和解密
最新推荐文章于 2024-06-01 11:34:24 发布