AES--前后台加密解密

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_42813491/article/details/102664916

AES--前后台加密解密

desc

  • 在做登录功能的时候,出于安全性考虑,我们需要将用户输入的明文密码进行加密,后台得到加密后的数据再进行解密
  • 前台只作一件事,发送请求的时候将密码加密
  • 后台将得到的数据解密后再进行后续处理
  • 前后台沟通的桥梁是密钥和向量,两者规定长度位16,可相同

前台

安装 npm i crypto-js

加密函数

// key,iv长度为16位,可相同 自定义即可
const Encrypt = word => {
    const keyStr = '1234567898745621';
    const ivStr = keyStr;
    const key = CryptoJS.enc.Utf8.parse(keyStr);
    const iv = CryptoJS.enc.Utf8.parse(ivStr);
    const srcs = CryptoJS.enc.Utf8.parse(word);
    const encrypted = CryptoJS.AES.encrypt(srcs, key, {
        iv: iv,
        mode: CryptoJS.mode.CBC,
        padding: CryptoJS.pad.ZeroPadding
    });
    return CryptoJS.enc.Base64.stringify(encrypted.ciphertext);
}

传参处理

在这里插入图片描述

后台处理

这里以springboot 为例

创建工具类AesHelper


public class AesHelper {
    //使用AES-128-CBC加密模式,key,iv长度为16位,可相同 自定义即可

    private static String key = "1234567898745621";
    private static String iv = "1234567898745621";

    //解密方法--接收aes加密后的字符串序列

    public static String desEncrypt(String str)  {
        try {
            byte[] decodeBytes =   Base64.getDecoder().decode(str);
            Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");
            SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes(), "AES");
            IvParameterSpec ivParameterSpec = new IvParameterSpec(iv.getBytes());
            cipher.init(Cipher.DECRYPT_MODE, secretKeySpec, ivParameterSpec);
            byte[] original = cipher.doFinal(decodeBytes);
            String originalString = new String(original);
            return originalString;
        } catch (Exception e) {
            System.out.println("解密失败:"+e.getMessage());
            return null;
        }
    }
}

使用

AesHelper.desEncrypt(password)//静态方法不需要new,直接用就ok

效果图

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_42813491/article/details/102664916
今日推荐