前端加密解密

一、 AES 加密与解密

高级加密标准(AES,Advanced Encryption Standard)为最常见的对称加密算法(微信小程序加密传输就是用这个加密算法的)。是一种对称加密算法也就是加密和解密用相同的密钥;

1.1 使用 crypto-js 实现 AES 加密

1.1.1 参数说明
  • data 要加密的明文
  • key 秘钥
  • iv 偏移
  • mode 加密的模式
  • padding 填充
1.1.2 代码演示
js 复制代码
const CryptoJS = require('crypto-js');
const encrypt = (data) => {
  const key = CryptoJS.enc.Latin1.parse('sd7JD8sKzc8MHdf8');
  const iv = CryptoJS.enc.Latin1.parse('29JlOd8SCdk82CFd');
  const encrypted = CryptoJS.AES.encrypt(
    data,
    key,
    {
      iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.ZeroPadding
    });
  return `${encrypted}`;
}

1.2 使用 实现 AES 解密

1.2.1 参数说明
  • data 要加密的明文
  • key 秘钥
  • iv 偏移
  • mode 加密的模式
  • padding 填充
1.2.2 代码演示
js 复制代码
const decrypt = (data) => {
  const key = CryptoJS.enc.Latin1.parse('sd7JD8sKzc8MHdf8');
  const iv = CryptoJS.enc.Latin1.parse('29JlOd8SCdk82CFd');
  decrypted='';
  decrypted=CryptoJS.AES.decrypt(
    data,
    key,
    {
      iv : iv,
      mode : CryptoJS.mode.CBC,
      padding : CryptoJS.pad.ZeroPadding
  });
  return decrypted.toString(CryptoJS.enc.Utf8);
}

二、 RSA 加密与解密

RSA加密算法是一种非对称加密算法。在公开密钥加密和电子商业中RSA被广泛使用。在使用 RSA 进行加密和解密时需要一对公钥和私钥,公钥一般存储在前端(前端使用公钥进行加密),而私钥一般存储与后端(后端使用私钥对密文进行解密);

3.1 公钥私钥的获取

  • Linux 下可直接通过终端命令来获取;
  • 通过在线网站生成: http://web.chacuo.net/netrsakeypair(选择合适的秘钥位数和格式);

3.2 jsencrypt 库实现 RSA 加密

js 复制代码
import JSEncrypt from 'jsencrypt';
const encrypted = (data) => {
  var encrypt = new JSEncrypt();
  const pubkey = `
  -----BEGIN PUBLIC KEY-----
  MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDpxv+yCAYuwXCSxLviAFyiy3V0
  rvveRTbzt4KKASqzbwSJ4Kst73HFFka5GaI4nnQZQt4OzJUD3jNYKphE6WdDpSEJ
  VuTbIzEoV0j9AS56gCF0YP8o8vTT3hQm2WtS+biG7sxJgDefdaWSaN6utwFZFfTh
  RvBBeuOMIPb6X60lIwIDAQAB
  -----END PUBLIC KEY-----`;
  encrypt.setPublicKey(pubkey);
  return encrypt.encrypt(data);
}

3.3 jsencrypt 库实现 RSA 解密

js 复制代码
import JSEncrypt from 'jsencrypt';
const uncrypted = (encrypted) => {
  var decrypt = new JSEncrypt();
  const privkey = `
  -----BEGIN PRIVATE KEY-----
  MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAOnG/7IIBi7BcJLE
  u+IAXKLLdXSu+95FNvO3gooBKrNvBIngqy3vccUWRrkZojiedBlC3g7MlQPeM1gq
  mETpZ0OlIQlW5NsjMShXSP0BLnqAIXRg/yjy9NPeFCbZa1L5uIbuzEmAN591pZJo
  3q63AVkV9OFG8EF644wg9vpfrSUjAgMBAAECgYAbuTnBhyoUiWQsQ6B0YM6bj71S
  JR5Bcbvekzir3Q+PT+8d2sLyI58+XDHu6ZdPV5s1E7T51FEnsEYugn6kTXmtVfP/
  rg46H8t8iMkHZ99APeyeDw7xuvuTMZTU+7LO+kwdjjQazIcUd9UhBmBJkZXOJmG5
  HG6TuFjuYHELn0xQwQJBAPiJ5FCH9h1rhxYMtyE7octuRH/bB7235UGXfgcMcitF
  SXmwFCyyXh5pYUxAjV0BVWYTbvqnDoZbQjXMMYiWUokCQQDwy6k9Pe0f8C0Jtw/1
  Etv2BaqN1sN3d8E/3MGTANlCjmLuZuFgolcdvMGp0NuXayPUP8y+Ie5YpQ2pTwPa
  6X9LAkAv1TIIwbH/RYORHc9c6QIhic5LIRdjTvIjZomNx7ptU39pmRa453cvuS5N
  o5rRTIFoDNNuEBq+hu++NNdPp0apAkBuUzGwYI4jgvxvphNGmyRyvTfektauBw1g
  wDlkrA/fAbPsPPDoQJkfg9tLfekOoEUjOzQIrS0yKjVvLEe85hyvAkEArluaKhJc
  gd+ptsqbAnbQClxhnRYP+OjCM89X+hE24iPDmGMjAZ2mCbl8Px8wGZ9HAbwyo6k9
  IanXW1Ad0NJlGw==
  -----END PRIVATE KEY-----`;
  decrypt.setPrivateKey(privkey);
  return decrypt.decrypt(encrypted);
}

3.4 补充说明

  • RSA 加密后的密文为 base64 格式;
  • 在公钥秘钥的存储中最好严格保留秘钥的换行符;
  • 在需要设置秘钥位数和格式的情况下请确保秘钥位数和格式的统一;

相关推荐
书唐瑞15 分钟前
谷歌浏览器和火狐浏览器对HTML的嗅探(Sniff)能力
前端·html
rocky19124 分钟前
谷歌浏览器插件 使用 playwright 回放用户动作键盘按键特殊处理方案
前端
rocky19127 分钟前
playwright里兼容处理回放无界微前端内iframe内部元素事件和不在无界微前端内的iframe元素
前端
rocky19129 分钟前
谷歌浏览器插件 使用 playwright 回放slide 拖动动作
前端
惺忪979843 分钟前
回调函数的概念
开发语言·前端·javascript
前端 贾公子1 小时前
Element Plus组件v-loading在el-dialog组件上使用无效
前端·javascript·vue.js
天外飞雨道沧桑1 小时前
JS/CSS实现元素样式隔离
前端·javascript·css·人工智能·ai
程序0071 小时前
前端写一个密码登录,验证码登录,注册模板
前端
-曾牛1 小时前
从零到一:XSS靶场 haozi.me 全关卡通关教程(含冷知识汇总)
前端·网络安全·渗透测试·靶场·xss·攻略·靶场教程
qq_419854051 小时前
自定义组件(移动端下拉多选)中使用 v-model
前端·javascript·vue.js