栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

VUE + JAVA (SpringBoot、strtus2) AES对称加密

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

VUE + JAVA (SpringBoot、strtus2) AES对称加密

npm install crypto-js,base64-js


1.前端 uniapp - vue                 创建cryptoJS文件 这个 key和iv要与后端填写保证一致 
import CryptoJS from 'crypto-js/crypto-js'



const KEY = CryptoJS.enc.Utf8.parse("qP2$bG9;vA0^uW0:");//  **        长度必须为16位
const IV = CryptoJS.enc.Utf8.parse("qP2$bG9;vA0^uW0:");           //  初始向量    长度随意


export function encrypt(str, keyStr, ivStr) {
    let key = KEY
    let iv = IV

    if (keyStr && ivStr) {
        key = CryptoJS.enc.Utf8.parse(keyStr);
        iv = CryptoJS.enc.Utf8.parse(ivStr);
    }

    let srcs = CryptoJS.enc.Utf8.parse(str);
    var encrypt = CryptoJS.AES.encrypt(srcs, key, {
        iv: iv,
        mode: CryptoJS.mode.CBC,            //这里可以选择AES加密的模式
        padding: CryptoJS.pad.Pkcs7
    });
    return CryptoJS.enc.Base64.stringify(encrypt.ciphertext);
}


export function decrypt(str, keyStr, ivStr) {
    let key = KEY
    let iv = IV

    if (keyStr && ivStr) {
        key = CryptoJS.enc.Utf8.parse(keyStr);
        iv = CryptoJS.enc.Utf8.parse(ivStr);
    }

    let base64 = CryptoJS.enc.Base64.parse(str);
    let src = CryptoJS.enc.Base64.stringify(base64);

    var decrypt = CryptoJS.AES.decrypt(src, key, {
        iv: iv,
        mode: CryptoJS.mode.CBC,            //这里可以选择AES解密的模式
        padding: CryptoJS.pad.Pkcs7
    });

    var decryptedStr = decrypt.toString(CryptoJS.enc.Utf8);
    return decryptedStr.toString();
}
 使用方式就是 在引入的地方导入刚刚创建cryptoJS调用 里面写上与后端约定的密钥

下面示例为 我与后台约定密钥:eNWBld07ItKkWmw9#@^F

	 

	 

java代码 AESUtils

package com.hxzk.util;

import com.sun.org.apache.xml.internal.security.utils.Base64;

import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.text.SimpleDateFormat;
import java.util.Date;


public class AESUtils {

    //获取Cipher对象的算法
    private static String transformation = "AES/CBC/PKCS5Padding";

    
    public static final String  SJ_KEY="qP2$bG9;vA0^uW0:";

    public static final String  AES= "AES";

    
    public static String encrypt(String input, String key, String algorithm) throws Exception {
        // 1,获取Cipher对象
        Cipher cipher = Cipher.getInstance(transformation);
        // 指定密钥规则
        SecretKeySpec sks = new SecretKeySpec(key.getBytes(), algorithm);
        // 2.初始化向量的秘钥长度需要根据算法而定,des 8个字节长度  aes 16个字节长度
        IvParameterSpec iv = new IvParameterSpec(key.getBytes()); //java iv与key一样
        cipher.init(Cipher.ENCRYPT_MODE, sks, iv);
//        cipher.init(Cipher.ENCRYPT_MODE, sks);
        // 3. 加密
        byte[] bytes = cipher.doFinal(input.getBytes());
        // 对数据进行Base64编码
        String encode = Base64.encode(bytes);
        return encode;
    }

    
    public static String decrypt(String input, String key, String algorithm) throws Exception {
        Cipher cipher = Cipher.getInstance(transformation);
        SecretKeySpec sks = new SecretKeySpec(key.getBytes(), algorithm);
        IvParameterSpec iv = new IvParameterSpec(key.getBytes());
        cipher.init(Cipher.DECRYPT_MODE, sks, iv);
//         cipher.init(Cipher.DECRYPT_MODE, sks);
        byte[] bytes = cipher.doFinal(Base64.decode(input));
        return new String(bytes);
    }
    
    
    
    public static void main(String[] args) {
		String jmqzf = "akjife;iiifej;'[asdfDFEFEFE<>>?<>??";
		String key = "5454545413185;'[";    //  约定的秘钥
		String sf = "AES";
		System.out.println("加密前字符串"+jmqzf);
		try {
			String jmhzf = encrypt(jmqzf,key,sf);
			System.out.println("加密后字符串"+jmhzf);
			String jiemhzf = decrypt(jmhzf,key,sf);
			System.out.println("解密后字符串"+jiemhzf);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

    public static String dateFmtPassword(Date date){
        SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyyMMddHHHHHHHH");
        return simpleDateFormat.format(date);
    }
    

}

然后AESUTILS.decrypt(request.getparams('key'))  因为前端传过来是加密好的 直接解密就完事了! 拿到约定的密钥 进行后续判断

大概调用方式 这是之前写的 逻辑不一致的 大概这么用的 后续有时间了加上正常逻辑的

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/937565.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号