欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

前端vue使用crypto.js加密Java后端解密

程序员文章站 2024-03-14 11:01:52
...

vue 安装crypto.js

cnpm install crypto-js --save

ECB:是一种基础的加密方式,密文被分割成分组长度相等的块(不足补齐),然后单独一个个加密,一个个输出组成密文。

CBC:是一种循环模式,前一个分组的密文和当前分组的明文异或或操作后再加密,这样做的目的是增强**难度。(不容易主动攻击,安全性好于ECB,是SSL、IPSec的标准)

ESB模式

1.前端js

const CryptoJS = require('crypto-js') // 引用AES源码js
const key = CryptoJS.enc.Utf8.parse('2020081720200817') // 十六位十六进制数作为**
// 解密方法
function Decrypt(word) {
    let decrypt = CryptoJS.AES.decrypt(word, key, {
        mode: CryptoJS.mode.ECB,
        padding: CryptoJS.pad.Pkcs7
    })
    let decryptedStr = decrypt.toString(CryptoJS.enc.Utf8)
    return decryptedStr.toString()
}
 
// 加密方法
function Encrypt(word) {
    let encrypted = CryptoJS.AES.encrypt(word, key, { 
        mode: CryptoJS.mode.ECB, 
        padding: CryptoJS.pad.Pkcs7 
    });
    return encrypted.toString()
}
export default {
    Decrypt,
    Encrypt
}

2.java解码

private final static String password = "2020081720200817";//目前使用
 
    public static String decryptAES(String content) throws Exception {
        byte[] contentNew = Base64.decodeBase64(content);
        SecretKeySpec skeySpec = new SecretKeySpec(password.getBytes("UTF-8"), "AES");
        Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); // "算法/模式/补码方式"
        cipher.init(Cipher.DECRYPT_MODE, skeySpec);
        return new String(cipher.doFinal(contentNew));
    }

CBC模式

1.前端js

const CryptoJS = require('crypto-js') // 引用AES源码js
const key = CryptoJS.enc.Utf8.parse('2020081720200817') // 十六位十六进制数作为**
const iv = CryptoJS.enc.Utf8.parse("2020081720200817"); //十六位十六进制数作为**偏移量
// 解密方法
function Decrypt(word) {
    var encryptedHexStr = CryptoJS.enc.Hex.parse(word);
    var srcs = CryptoJS.enc.Base64.stringify(encryptedHexStr);
    let decrypt = CryptoJS.AES.decrypt(srcs, key, {
        iv: iv,
        mode: CryptoJS.mode.CBC,
        padding: CryptoJS.pad.Pkcs7
    })
    let decryptedStr = decrypt.toString(CryptoJS.enc.Utf8)
    return decryptedStr.toString()
}
 
// 加密方法
function Encrypt(word) {
    let encrypted = CryptoJS.AES.encrypt(word, key, {
        iv: iv,
        mode: CryptoJS.mode.CBC,
        padding: CryptoJS.pad.Pkcs7
    })
    return encrypted.toString()
}
export default {
    Decrypt,
    Encrypt
}

2.java解码

private final static String password = "2020081720200817";//目前使用
private final static String IV = "2020081720200817";//目前使用
 
public static String decryptAES(String content) throws Exception {
        SecretKeySpec skeySpec = new SecretKeySpec(password.getBytes("ASCII"), "AES");
        Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
        IvParameterSpec iv = new IvParameterSpec(IV.getBytes());
        cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv);
        byte[] encrypted1 = Base64.decodeBase64(content);//先用bAES64解密
        return new String(cipher.doFinal(encrypted1));
    }

tips:前后端key一定要对应上

相关标签: js插件