基于RSA+AES实现前后端(VUE+PHP)参数加密传输

Posted liong01

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于RSA+AES实现前后端(VUE+PHP)参数加密传输相关的知识,希望对你有一定的参考价值。

实现原理:

前端篇

引入第三方组件,jsencrypt提供RAS加密,crypto-js提供AES加密

npm install jsencrypt
npm install crypto-js
import CryptoJs from "crypto-js"
import JsEncrypt from "jsencrypt"

export default {
  /**
   * AES加密
   * word 待加密字符串
   * key  十六位十六进制数AES秘钥
   */
  aesEncrypt(word, key){
    let encrypted = CryptoJs.AES.encrypt(CryptoJs.enc.Utf8.parse(word), CryptoJs.enc.Utf8.parse(key), {
      iv: CryptoJs.enc.Utf8.parse("012345679ABCDEF"),
      mode: CryptoJs.mode.CBC,
      padding: CryptoJs.pad.Pkcs7,
    });
  }

  /**
   * RSA加密
   * word 待加密字符串
   * rsaPubKey RSA公钥
   */
  rsaEncrypt(word, rsaPubKey){
    let jse = new JsEncrypt();
    jse.setPublicKey(publicKey);
    return jse.encrypt(word);
  }

  /**
   * AES随机秘钥
   */
  aesRandomKey(){
    let charStr = "012345679abcdefABCDEF";
    let randomKey = "";
    for (var i = 0; i < 16; i++) {
      randomKey += charStr[parseInt(Math.random() * charStr.length)];
    }
    return randomKey;
  }   

  /**
   * RSA公钥,由后端提供或通过接口动态获取
   */
  rsaPubKey(){
    return "xxx";
  }
}

实现

let word = "test";
let aesKey = aesRandomKey();
let rsaPubKey = rsaPubKey();

axios.post("xxx", {
  wordEn: aesEncrypt(word, aesKey), // 参数密文
  aesKeyEn: rsaEncrypt(aesKey, rsaPubKey), // AES秘钥密文
});

以上是关于基于RSA+AES实现前后端(VUE+PHP)参数加密传输的主要内容,如果未能解决你的问题,请参考以下文章

rsa加密前后端不一致

前端AES + RSA加密

PHP如何实现AES加解密

密码学之RSA与AES加密解密在项目中的应用

IOS AES加密

基于PHP语言Laravel9+Vue+ElementUI实现的权限控制系统