此工具类主要实现,字符串的加密,输出为Base64编码的字符串。字符串的解密,输入为Base64编码的字符串。工具类里的IV向量参数,需要用户自己保存,工具类中是默认写死在代码中的,并不规范。IV向量主要用于加解密中,只依赖数据秘钥的情况。每次加解密都需要IV与数据秘钥配合运行。
import org.springframework.util.Base64Utils;
import javax.crypto.Cipher;
import javax.crypto.spec.GCMParameterSpec;
import javax.crypto.spec.SecretKeySpec;
/**
* 信封加解密工具类
*/
public class EnvelopeEDUtil {
public static void main(String[] args) throws Exception {
String cipherText = encryptData("等待加密的明文", "数据秘钥");
String plainText = decryptData(cipherText, "数据秘钥";
//输出密文
System.out.println(cipherText);
//输出明文
System.out.println(plainText);
}
private static final String DEFAULT_IV = "加密时的IV要与解密时的IV相同";
private static final int GCM_IV_LENGTH = 12;
private static final int GCM_TAG_LENGTH = 16;
private static final String DEFAULT_TRANSFORMATION = "AES/GCM/NoPadding";
private static final String DEFAULT_ALGORITHM = "AES";
public static String encryptData(String plainText,String plainDataKey,String iv) throws Exception {
return encryptData(plainText,plainDataKey,DEFAULT_TRANSFORMATION,iv,DEFAULT_ALGORITHM);
}
public static String decryptData(String cipherText,String plainDataKey,String iv) throws Exception {
return decryptData(cipherText,plainDataKey,DEFAULT_TRANSFORMATION,iv,DEFAULT_ALGORITHM);
}
public static String encryptData(String plainText,String plainDataKey) throws Exception {
return encryptData(plainText,plainDataKey,DEFAULT_TRANSFORMATION,DEFAULT_IV,DEFAULT_ALGORITHM);
}
public static String decryptData(String cipherText,String plainDataKey) throws Exception {
return decryptData(cipherText,plainDataKey,DEFAULT_TRANSFORMATION,DEFAULT_IV,DEFAULT_ALGORITHM);
}
public static String encryptData(String plainText,String plainDataKey,String transformation,String iv,String algorithm) throws Exception {
Cipher cipher = Cipher.getInstance(transformation);
SecretKeySpec keySpec = new SecretKeySpec(plainDataKey.getBytes(), algorithm);
GCMParameterSpec gcmParameterSpec = new GCMParameterSpec(GCM_TAG_LENGTH * 8, iv.getBytes());
cipher.init(Cipher.ENCRYPT_MODE, keySpec,gcmParameterSpec);
return Base64Utils.encodeToString(cipher.doFinal(plainText.getBytes()));
}
public static String decryptData(String cipherText,String plainDataKey,String transformation,String iv,String algorithm) throws Exception {
Cipher cipher = Cipher.getInstance(transformation);
SecretKeySpec keySpec = new SecretKeySpec(plainDataKey.getBytes(), algorithm);
GCMParameterSpec gcmParameterSpec = new GCMParameterSpec(GCM_TAG_LENGTH * 8, iv.getBytes());
cipher.init(Cipher.DECRYPT_MODE, keySpec,gcmParameterSpec);
return new String(cipher.doFinal(Base64Utils.decodeFromString(cipherText)));
}
}
版权声明:本文为qq_29519041原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。