阿里云专属KMS信封加解密工具类

此工具类主要实现,字符串的加密,输出为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版权协议,转载请附上原文出处链接和本声明。