首页 > 其他分享 >JS之对密文进行AES解密

JS之对密文进行AES解密

时间:2024-03-16 18:45:41浏览次数:22  
标签:AES const JS decipher forge 密文 someBytes

需求:用户ID和用户名不能在传输时同时明文出现

解决方式:后端对用户ID和用户名进行加密,传输后前端解密显示

 

后端的加密方式为:

1.密码转换为字节,先通过PBKDF2WithHmacSHA256,盐值salt123(转换为字节),迭代次数2048次,密钥长度128位,将密码处理成密钥。

2.用AES/GCM/NoPadding的方式对载荷(转换为字节)进行加密,然后IV(字节)会拼在密文的前面,最后对整段字节进行Base64。

 

前端解密JS如下:

一、通过PBKDF2WithHmacSHA256获得密钥

1.导入crypto

import CryptoJS from "crypto-js";

2.对密码进行PBKDF2(Password-Based Key Derivation Function 2)加密,通过加盐、迭代次数、密钥位数,设置哈希算法为SHA256(用于验证),获得密钥。

const password = "abcdef";
const salt = "salt123";
const keylen = 128;
const iterations = 2048;

const keyStr = CryptoJS.PBKDF2(password, salt, {
  keySize: keylen / 32,
  iterations: iterations,
});

以上示例代码PBKDF2的默认配置参数为设置哈希算法为SHA256。

 

二、

1.导入node-forge(生成)

import forge from "node-forge";

2.定义十六进制字符串转换为普通字符串的函数

const hexToString = (hex) => {
  let result = "";
  for (let i = 0; i < hex.length; i += 2) {
    const decimal = parseInt(hex.substr(i, 2), 16);
    result += String.fromCharCode(decimal);
  }
  return result;
};

3.用AES的GCM模式解密密文,密文字符串即someBytes。

const decryptAESGCM = (someBytes) => {
  someBytes = atob(someBytes);
  const iv = someBytes.slice(0, 12);
  const tag = someBytes.slice(-16);
  const data = someBytes.slice(12, someBytes.length - 16);
  const decipher = forge.cipher.createDecipher(
    "AES-GCM",
    hexToString(keyStr.toString())
  );
  decipher.start({
    iv: iv,
    tag: tag,
  });
  decipher.update(forge.util.createBuffer(data));
  const pass = decipher.finish();
  if (pass) {
    return decipher.output.toString();
  }
};

atob函数是JavaScript中的一个内置函数,用于将base64编码的字符串解码为原始字符串。

在 JavaScript 中,有两个函数被分别用来处理解码和编码 base64 字符串:

atob() //ASCII to Base64
btoa() //Base64 to ASCII

IV是初始化向量的意思。

 

标签:AES,const,JS,decipher,forge,密文,someBytes
From: https://www.cnblogs.com/luoyihao/p/18077374

相关文章

  • nodejs打包问题解决实例
    node命令集合npmsetregistryhttps://registry.npm.taobao.org/npmconfigsetregistryhttps://registry.npmjs.org/npmconfigsetsass_binary_sitehttps://npm.taobao.org/mirrors/node-sass/npmgetregistry //npm安装包的提示操作目录权限不足npmconfigsetu......
  • 如何在vue的style标签中使用js?
    这是面试的时候遇到的一个面试题,当时没回答上来。。。var()-CSS:层叠样式表|MDN自定义属性(--*):CSS变量-CSS:层叠样式表|MDN我们先了解一下cssvar()函数以及css自定义属性通过var函数和自定义属性可以复用某些css样式,例如::root{--main-bg-color:pink;}b......
  • 常用加密及其相关的概念、简介(对称、AES、非对称、RSA、散列、HASH、消息认证码、HMAC
    PS:要转载请注明出处,本人版权所有。PS:这个只是基于《我自己》的理解,如果和你的原则及想法相冲突,请谅解,勿喷。环境说明  无前言  在之前,一直是通过生活、工作零零碎碎接触过加密及加密算法相关的信息,但是也只是听说过,并不知道这些算法用处和区别。  最近由于工作安......
  • Node.js配置(需要修改默认缓存路径的可看)
    Node.js配置针对想要移除默认node位置的配置设置安装node进入node中文网下载|Node.js中文网(nodejs.cn)一般选择左边的版本,为稳定版本这里也给出官网,中文网只是国内镜像官网的不是官方的源安装过程可以无脑下一步,注意修改存储位置就行在cmd面板分别输入以下内容,可......
  • 前端开发时,应该如何考虑开发的主次先后,比如数据结构、数据流转、UI绘制,js逻辑等等,请给
    前端开发时,应该如何考虑开发的主次先后,比如数据结构、数据流转、UI绘制,js逻辑等等,请给出你的最佳实践在前端开发中,正确规划和安排各项任务的主次先后对于项目的顺利进行至关重要。以下是一个针对数据结构、数据流转、UI绘制以及JavaScript逻辑等方面的开发优先级与最佳实践建议:......
  • 智慧医养大数据公共服务系统(JSP+java+springmvc+mysql+MyBatis)
    本项目包含程序+源码+数据库+LW+调试部署环境,文末可获取一份本项目的java源码和数据库参考。项目文件图 项目介绍随着老龄化社会的到来和大数据技术的发展,智慧医养结合的公共服务系统成为社会关注的热点。这一系统能够集成医疗、养老、健康管理等数据,通过智能分析和处理,......
  • Mac air node.js重新安装版本,删除node文件后报错,报错信息和解决办法
    1、在终端执行:node-v  dyld[13110]:Librarynotloaded:/usr/local/opt/icu4c/lib/libicui18n.73.dylib   Referencedfrom:/usr/local/Cellar/node@16/16.20.2/bin/node   Reason:tried:'/usr/local/opt/icu4c/lib/libicui18n.73.dylib'(nosuchfil......
  • 专利管理系统的设计与实现-年费管理(JSP+java+springmvc+mysql+MyBatis)
    本项目包含程序+源码+数据库+LW+调试部署环境,文末可获取一份本项目的java源码和数据库参考。项目文件图 项目介绍在知识产权高度重视的今天,专利申请成为企业和个人保护创新成果的重要手段。随之而来的是专利年费管理的复杂性,如何高效、准确地处理这些费用成为专利管理中......
  • 药品销售管理系统(JSP+java+springmvc+mysql+MyBatis)
    本项目包含程序+源码+数据库+LW+调试部署环境,文末可获取一份本项目的java源码和数据库参考。项目文件图 项目介绍随着医药行业的快速发展,药品销售的管理日益复杂化,对于系统化、自动化的药品销售管理系统需求不断增加。此系统可以实现对药品库存、销售情况、顾客信息及销......
  • 在YAPI中使用mock.js语法编写接口
    1.问题编写完json数据后,尝试过导入json和json-schema,YAPI总是无法将mock语法转化相应数据1.1导入json的方式不支持mock语法1.2导入json-schema的方式识别不了我写的mock语法json2.解决先在设置中开启json5,再关闭如图所示的按钮显示如下图所示即成功......