Java使用AES 128位加密算法对字符串进行加密/解密

Java 2020-02-03 阅读 85 评论 0

在 web 开发时,有时候会碰到一些比较敏感的信息传到了客户端,比如需要对url、字符串,这时可以对其进行加密。下面是用 java 实现 AES 128位加/解密的代码。

实现

import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;

/**
 * 使用 AES 128位算法 加密/解密字符串
 */
public class EncryptDecryptString {

    private static final String encryptionKey = "ABCDEFGHIJKLMNOP";
    private static final String characterEncoding = "UTF-8";
    private static final String cipherTransformation = "AES/CBC/PKCS5PADDING";
    private static final String aesEncryptionAlgorithem = "AES";


    /**
     * 加密文本
     *
     * @param plainText
     * @return encryptedText
     */
    public static String encrypt(String plainText) {
        String encryptedText = "";
        try {
            Cipher cipher = Cipher.getInstance(cipherTransformation);
            byte[] key = encryptionKey.getBytes(characterEncoding);
            SecretKeySpec secretKey = new SecretKeySpec(key, aesEncryptionAlgorithem);
            IvParameterSpec ivparameterspec = new IvParameterSpec(key);
            cipher.init(Cipher.ENCRYPT_MODE, secretKey, ivparameterspec);
            byte[] cipherText = cipher.doFinal(plainText.getBytes("UTF8"));
            Base64.Encoder encoder = Base64.getEncoder();
            encryptedText = encoder.encodeToString(cipherText);
        } catch (Exception E) {
            System.err.println("Encrypt Exception : " + E.getMessage());
        }
        return encryptedText;
    }

    /**
     * 解密文本
     *
     * @param encryptedText
     * @return decryptedText
     */
    public static String decrypt(String encryptedText) {
        String decryptedText = "";
        try {
            Cipher cipher = Cipher.getInstance(cipherTransformation);
            byte[] key = encryptionKey.getBytes(characterEncoding);
            SecretKeySpec secretKey = new SecretKeySpec(key, aesEncryptionAlgorithem);
            IvParameterSpec ivparameterspec = new IvParameterSpec(key);
            cipher.init(Cipher.DECRYPT_MODE, secretKey, ivparameterspec);
            Base64.Decoder decoder = Base64.getDecoder();
            byte[] cipherText = decoder.decode(encryptedText.getBytes("UTF8"));
            decryptedText = new String(cipher.doFinal(cipherText), "UTF-8");
        } catch (Exception E) {
            System.err.println("decrypt Exception : " + E.getMessage());
        }
        return decryptedText;
    }
}

调用

下面是使用AES 128位加密算法对字符串进行加密,并使用相同的方法对加密后的字符串进行解密。

public class Test {
    public static void main(String[] args) {
        String plainString = "{\"hello\": \"world\"}";

        String encyptStr = EncryptDecryptString.encrypt(plainString);
        String decryptStr = EncryptDecryptString.decrypt(encyptStr);

        System.out.println("Plain   String  : " + plainString);
        System.out.println("Encrypt String  : " + encyptStr);
        System.out.println("Decrypt String  : " + decryptStr);
    }
}

输出

Plain   String  : {"hello": "world"}
Encrypt String  : YbhOplwpB8rq6J7euPmb6cZX+NMCWzKEvZ0tpF1K8NQ=
Decrypt String  : {"hello": "world"}
最后更新 2020-02-03
MIP.watch('startSearch', function (newVal, oldVal) { if(newVal) { var keyword = MIP.getData('keyword'); console.log(keyword); // 替换当前历史记录,新增 MIP.viewer.open('/s/' + keyword, {replace: true}); setTimeout(function () { MIP.setData({startSearch: false}) }, 1000); } }); MIP.watch('goHome', function (newVal, oldVal) { MIP.viewer.open('/', {replace: false}); });