摘要:前言因公司现有后台管理系统项目需对部分网络请求接口的重要数据进行加密,整合了一套简单的基于加密机制的前端解决方案。用户已登录成功,页面刷新后将会重新生成,这时候需从中获取并和上传后端,后端重新绑定和。
前言
因公司现有后台管理系统项目需对部分网络请求接口的重要数据进行加密,整合了一套简单的基于 RSA + AES 加密机制的前端解决方案。
参考文献:
crypto 廖雪峰
crypto-js aes 加解密
rsa 加解密
参考 API:
crypto-js
JSEncrypt
依赖crypto-js: npm i crypto-js
JSEncrypt:npm i jsencrypt
加密流程先上图
因项目为后台管理系统,所以这里会有两种业务场景:
用户在未登录前是没有鉴权 token 的,需在成功登录并获取 token 后和 encryptKey 一并上传后端,后端才能将 token 与 encryptKey 做绑定。
用户已登录成功,页面刷新后将会重新生成 aesKey ,这时候需从 cookie 中获取 token 并和 encryptKey 上传后端,后端重新绑定 token 和 encryptKey。
代码encryption.js 封装
import CryptoJS from "crypto-js" import JSEncrypt from "jsencrypt" const encryptor = new JSEncrypt() // 生成 AESKEY export const aesKey = createAesKey() export function createAesKey () { const expect = 16 let str = Math.random().toString(36).substr(2) while (str.length < expect) { str += Math.random().toString(36).substr(2) } str = str.substr(0, 16) return str } /** * AES 加密 * @param word 待加密字段 * @param keyStr 加密 key * @returns {string} 返回加密字段 */ export function aesEncrypt (word, keyStr) { keyStr = keyStr || aesKey console.log(keyStr) const key = CryptoJS.enc.Utf8.parse(keyStr) let srcs = "" switch (typeof (word)) { case "string": srcs = CryptoJS.enc.Utf8.parse(word) break case "object": srcs = CryptoJS.enc.Utf8.parse(JSON.stringify(word)) break default: srcs = CryptoJS.enc.Utf8.parse(word.toString()) } const encrypted = CryptoJS.AES.encrypt(srcs, key, {iv: key, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7}) return encrypted.toString() } /** * AES 解密 * @param word 待解密数据 * @param keyStr 解密 key * @returns {string} 返回解密字符串 */ export function aesDecrypt (word, keyStr) { keyStr = keyStr || aesKey const key = CryptoJS.enc.Utf8.parse(keyStr) const decrypt = CryptoJS.AES.decrypt(word, key, { iv: key, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 }) return CryptoJS.enc.Utf8.stringify(decrypt).toString() } /** * RSA 设置公钥 * @param val 公钥 */ export function setPublicKey (val) { encryptor.setPublicKey(val) } /** * RSA 加密 * @param data 待加密数据 * @returns {PromiseLike总结} 返回加密字符串 */ export function rsaEncrypt (data) { return encryptor.encrypt(data) }
AES 加解密涉及到的模式(如 CBC、ECB 等)、偏移量和填充等,请参考文中前言提及的文献和 API本文仅为解决方案参考,请结合实际业务需求及业务场景自由发挥
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/104431.html
摘要:内容主要有四个方面趋势基础实践调试。一趋势这一章节主要介绍近几年和未来的趋势,包括两大浏览器和对的态度,以及淘宝天猫和阿里云的实践情况。完整性是指为了避免网络中传输的数据被非法篡改,使用算法来保证消息的完整性。 摘要: 本文邀请阿里云CDN HTTPS技术专家金九,分享Tengine的一些HTTPS实践经验。内容主要有四个方面:HTTPS趋势、HTTPS基础、HTTPS实践、HTTPS...
摘要:比如加密算法但是加密也存在局限性,需要定期维护。当然聪明的你可能会说,那我就使用非对称加密算法,比如好了。所以本次结合了和来实现我们的数据传输。发送方接收到请求返回结果后,通过约定的方式对返回结果进行处理,以供后续使用。 最近公司需要通过公网与其它平台完成接口对接,但是基于开发时间和其它因素的考虑,本次对接无法采用https协议实现。既然不能用https协议,那就退而求其次采用http...
摘要:然而,最近被泄密的文件表明,美国国家安全局记录了庞大的互联网流量并且保留其中的加密信息供以后解密分析。的加密套件列表和在的调查中实际协商的加密套件。如果美国国家安全局获得了这些网站的私钥,除了谷歌以外所有的站点历史通信都将被解密。 成千上万的网站和个人依靠SSL来保护敏感信息的传输,比如密码、信用卡信息和那些期望通过加密来保障隐私的个人信息。然而,最近被泄密的文件表明,美国国家安全局N...
阅读 2309·2021-11-23 09:51
阅读 3747·2021-11-11 10:57
阅读 1390·2021-10-09 09:43
阅读 2480·2021-09-29 09:35
阅读 2012·2019-08-30 15:54
阅读 1787·2019-08-30 15:44
阅读 3178·2019-08-30 13:20
阅读 1686·2019-08-30 11:19