AES加密方式-前后端实现

前端js实现方式

导入文件

首先导入crypto-js.min.js :

https://github.com/tu-gou/CryptoTools/blob/main/crypto-js.min.js

创建文件

然后创建AES.js文件,使用此文件内的函数进行AES加密。

文件内容如下:

const k='uUXsN6okXYqsh0BB';
function AES_Encrypt(data) {
    // 定义前端Key秘钥-需要注意 跟后端解密秘钥保持一致
    let key=k;
    key = CryptoJS.enc.Utf8.parse(key);
    let encrypted = CryptoJS.AES.encrypt(data, key, {
        mode: CryptoJS.mode.ECB,
        padding: CryptoJS.pad.Pkcs7
    });
    return CryptoJS.enc.Base64.stringify(CryptoJS.enc.Hex.parse(encrypted.ciphertext.toString()));
}
function AES_Decrypt(word) {
    let key=k;
    key = CryptoJS.enc.Utf8.parse(key);
    let decrypt = CryptoJS.AES.decrypt(word, key, {  mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 });
    let decryptedStr = decrypt.toString(CryptoJS.enc.Utf8);
    return decryptedStr;
}

其中k为密钥,可以随意编写,但需要保证16位长度。 这两个函数提供了AES加密和对应的解密功能。

使用方式

需要使用什么功能就可以把对应的函数放到需要进行加解密手段的js文件中。然后通过函数调用来使用。

例如使用加密功能:

const k='uUXsN6okXYqsh0BB';
function AES_Encrypt(data) {
    // 定义前端Key秘钥-需要注意 跟后端解密秘钥保持一致
    let key=k;
    key = CryptoJS.enc.Utf8.parse(key);
    let encrypted = CryptoJS.AES.encrypt(data, key, {
        mode: CryptoJS.mode.ECB,
        padding: CryptoJS.pad.Pkcs7
    });
    return CryptoJS.enc.Base64.stringify(CryptoJS.enc.Hex.parse(encrypted.ciphertext.toString()));
}
let cipher = AES_Encrypt(plaintext);

后端java实现

创建工具类

首先创建一个AES的工具类AESUtils.java

/**
     * 加密方法,采用AES_128位
     * @param plainText
     * @param secretKey
     * @return
     */
    public static String encrypt(String plainText, String secretKey) {
        if (secretKey == null) {
            throw new IllegalArgumentException("sSrc不能为空");
        }
        // 判断Key是否为16位
        if (secretKey.length() != 16) {
            throw new IllegalArgumentException("sKey长度需要为16位");
        }

        try {
            byte[] raw = secretKey.getBytes(StandardCharsets.UTF_8);
            SecretKeySpec secretkeySpec = new SecretKeySpec(raw, "AES");

            //"算法/模式/补码方式"
            Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
            cipher.init(Cipher.ENCRYPT_MODE, secretkeySpec);
            byte[] encrypted = cipher.doFinal(plainText.getBytes(StandardCharsets.UTF_8));

            //此处使用BASE64做转码功能,同时能起到2次加密的作用。
            return new Base64().encodeToString(encrypted);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    /**
     * 解密方法 对AES_128位解密
     * @param cipherText
     * @return
     */
    public static String decrypt(String cipherText,String secretKey) {
        try {
            byte[] raw = secretKey.getBytes(StandardCharsets.UTF_8);
            SecretKeySpec secretkeySpec = new SecretKeySpec(raw, "AES");
            Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");

            cipher.init(Cipher.DECRYPT_MODE, secretkeySpec);
            //先用base64解密
            byte[] encrypted1 = new Base64().decode(cipherText);
            byte[] original = cipher.doFinal(encrypted1);
            String originalString = new String(original, StandardCharsets.UTF_8);
            return originalString;
        } catch (Exception ex) {
            throw new RuntimeException(ex);
        }
    }

使用工具类

直接在需要使用AES的文件中导入工具类,使用相应的方法即可。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值