JavaScript 安全的《加/解密处理》的实战--案例(二)

news2025/1/16 2:41:09

前言:

在Web开发中,安全性一直是一个重要而复杂的议题,尤其是与敏感数据操作有关时。数据传输地过程中需要保证信息绝对的安全性,包括了诸如用户名、密码、个人信息等,这就需要对这类信息进行加密与解密。本案例(二)将带领大家实践运用JavaScript进行基本的解密流程。

对标2023年12月6日<有道翻译>的数据加密(片段)
图例:


解密数据函数:AES-128-CBC 解密案例

案例场景基于Node.js环境,我们会使用到Crypto模块提供的能力,构造一个灵活的解密函数 R。此函数负责对按照AES-128-CBC加密标准加密的数据进行解密。


 

// 定义基于AES-128-CBC算法的解密函数R
const R = (t, o, n) => {
    // 参数t代表Base64编码的加密字符串;o是密钥;n是初始化向量
    if (!t) return null; // 存在性检查,如果t不存在,返回null

    const e = require('crypto'), // Node.js的crypto模块
          y = someFormatterFunction; // 假设存在一个处理密钥和IV的函数

    // 构建固定长度的密钥和初始化向量IV
    const a = e.alloc(16, y(o)),
          i = e.alloc(16, y(n)); 

    // 创建AES解密实例
    const r = e.createDecipheriv("aes-128-cbc", a, i); 

    // 解密过程
    let s = r.update(t, "base64", "utf-8"); // Base64解码,之后以utf-8格式的文本输出
    s += r.final("utf-8"); // 追加解密完成后的最后输出内容

    return s; // 返回解密后的数据
};

详解(转个格式看-->原文转function):

function f (t,o,n){
                if (!t)
                    return null;
                const a = e.alloc(16, y(o))
                  , i = e.alloc(16, y(n))
                  , r = c.a.createDecipheriv("aes-128-cbc", a, i);
                let s = r.update(t, "base64", "utf-8");
                return s += r.final("utf-8"),
                s
            }  

解析:

  1. if (!t) return null;:如果输入 t(被假设是含有加密内容的变量)不存在,则函数返回 null;这可能是一种错误处理或条件检测,以避免空值导致进一步的运算错误。
  2. const a = e.alloc(16, y(o)), i = e.alloc(16, y(n));:声明了两个常量 a 和 i,都调用了 e.alloc(16, y(o)),e 可能是代表 Buffer 对象(在Node.js中用于处理二进制流),e.alloc 方法用于创建一个特定大小的buffer,此处是16字节,初始化填充为函数y对o和n返回值的结果,这里 o 很可能代表密钥,n 代表初始化向量(IV),这是AES加密所需的组件,而 y() 函数的作用可能是格式化或处理这些参数。
  3. const r = c.a.createDecipheriv("aes-128-cbc", a, i);:创建了一个解密器 r,c.a 似乎是指向某个加密库中的 createDecipheriv 方法。此方法用于初始化一个AES-128-CBC算法的解密流程,其中a 和 i 分别是处理过的密钥和初始化向量。
  4. let s = r.update(t, "base64", "utf-8");:开始解密过程,其中 r.update 负责处理加密数据 t, t 的格式是 "base64", 指定输出结果为 "utf-8" 格式的字符串,将解密结果分配给变量 s。
  5. return s += r.final("utf-8");:完成解密过程,r.final() 用来处理最后的加密块并返回剩余的解密内容,这里也是 "utf-8" 格式,然后将其结果附加到 s 上。最后,完整的解密字符串 s 被返回

在上述示例中,R 函数展示如何结合Node.js的底层加密库来解开数据的密文,并将其转变为可读格式:

存在性验证:保证合法数据的输入,防止无效操作。
资源调用:利用Node.js内建的crypto模块进行密钥和IV的处理,提供加密需求。
解密过程:通过update及final方法处理加密字符串,并以合适编码输出文本。
总结:
遇上AES-128-CBC加密代码的时候:
  1. 分析加密参数:识别加密过程中使用的关键参数,例如密钥(Key)、初始化向量(IV)、密码文本等。
  2. 理解加密过程:弄清楚加密是如何进行的,尤其是加密模式(CBC)和填充方案(例如PKCS7)。
  3. 提取密钥和IV:拦截或找到静态代码中硬编码或动态生成的密钥和IV。
  4. 构建解密过程:使用相同的算法参数(密钥、IV)书写对应的解密代码。
  5. 关注错误处理:理解代码如何应对解密时出现的错误或异常情况。
  6. 注意数据编码方式:值得注意的输入或输出可能采用Base64、十六进制等编码方式,需要适当转换。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1287655.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【LeetCode热题100】【双指针】接雨水

给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 示例 1&#xff1a; 输入&#xff1a;height [0,1,0,2,1,0,1,3,2,1,2,1] 输出&#xff1a;6 解释&#xff1a;上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] …

一. 初识数据结构和算法

数据结构与算法是一个达到高级程序员的敲门砖。当你脱离了语言的应用层面&#xff0c;去思考他的设计层面时&#xff0c;你就依旧已经开始初识数据结构与算法了 数据结构 什么是数据结构 对于数据结构的定义官方并没有统一的解释&#xff0c;在各个百科以及算法的书中&#xf…

《课程教育研究》期刊投稿简介

《课程教育研究》杂志系内蒙古自治区文化和旅游厅主管&#xff0c;内蒙古自治区北方文化研究院主办&#xff0c;面向国内公开发行的教育类学术期刊。国际标准刊号&#xff1a;ISSN2095-3089&#xff0c;国内统一刊号CN15-1362/G4&#xff0c;月刊。 国家新闻出版总署批准的正规…

使用cross-env兼容windows和linux环境的nodejs变量

文章目录 前言一、windows使用二、linux环境三、区别相同点不同点 四、使用cross-env兼容项目安装cross-env使用 总结如有启发&#xff0c;可点赞收藏哟~ 前言 由于办公和家里的开发环境不同&#xff08;windows和linux&#xff09; 在处理nodejs项目的时候&#xff0c;脚本设…

使用 Go Modules 管理依赖:简明教程

一、GoLang 中包的介绍和定义 包&#xff08;package&#xff09;是多个 Go 源码的集合&#xff0c;是一种高级的代码复用方案Go 语言为我们提供了很多内置包&#xff0c;如 fmt、strconv、strings、sort、errors、times、encoding/json、os、io 等Golang 中的包可以分为三种&…

去掉参数中第一个“,”

记录一下&#xff0c;前端传参中&#xff0c;传给我参数是“categoryIds: ,1731557494586241026,1731569816263311362,1731569855534579713,1731858335179223042,1731858366821052418” 但是后端&#xff0c;因为我的mybati是in查询&#xff0c;所以因为第一个是“,”。所以会导…

搭建React项目,基于Vite+React+TS+ESLint+Prettier+Husky+Commitlint

基于ViteReactTSESLintPrettierHuskyCommitlint搭建React项目 node: 20.10.0 一、创建项目 安装包管理器pnpm npm i pnpm -g基于Vite创建项目 pnpm create vitelatest web-gis-react --template react-ts进入项目目录安装依赖 $ cd web-gis-react $ pnpm i启动项目 $ pnpm…

WeakMap

WeakMap简介 作为es6一种新的数据结构&#xff0c;他是一种键值对的集合。与Map最大的区别有两个 1. 是其中的键必须是对象或非全局注册的符号。 全局注册的符号 const s1 Symbol.for(mySymbol) 非全局注册的符号 const s1 Symbol(mySymbol)了解Symbol.for 2. 不会创建对它…

C++12.5

想象一下你去了一家动物园&#xff0c;看到了许多不同种类的动物&#xff0c;如狮子、大象、猴子等。现在&#xff0c;动物园里有一位讲解员&#xff0c;他会为每种动物表演做简单的介绍。 在这个场景中&#xff0c;我们可以将动物比作是不同的类&#xff0c;而每种动物表演则…

我在USC南加大学游戏:真实经历/录取作品集_RoSSo艺术留学

近日&#xff0c;美国Common App最新早申统计数据&#xff1a;早申人数与疫情前相比增加了41%&#xff01;专注于国际艺术教育的RoSSo也发现&#xff0c;2022-2023申请季提交早申的学生中&#xff0c;各类热门院校以及艺术留学专业申请人数均是“涨”声一片&#xff01; 图源官…

mvc模式test2

关于上篇book.java中使用类型不一样导致的报错 是在bookdao.java中解决 bookservlet.java package servlet; import java.io.IOException; import beans.Book; import dao.BookDao; import java.util.ArrayList; import javax.servlet.ServletException; import javax.servl…

[跑代码-遇到问题-报错3]BK-SDM. KeyError: ‘up_blocks.0‘

File "src/kd_train_text_to_image.py", line 790, in mainKeyError: up_blocks.0 出问题的原因 dict acts_tea读到dict acts_stu没有读到dict 原因是 unet_teacher的结构后面直接接down_blocks&#xff08;正常&#xff09;unet_teacher.down_blocks 但是unet的结构…

神经网络模型流程与卷积神经网络实现

神经网络模型流程 神经网络模型的搭建流程&#xff0c;整理下自己的思路&#xff0c;这个过程不会细分出来&#xff0c;而是主流程。 在这里我主要是把整个流程分为两个主流程&#xff0c;即预训练与推理。预训练过程主要是生成超参数文件与搭设神经网络结构&#xff1b;而推理…

Vue3 pinia的基本使用

pinia的使用跟vuex很像&#xff0c;去除了很多没用的api&#xff0c;写法有两种&#xff0c;一种老式的选项式api还有一种组合式api&#xff0c;用哪种根据自己喜好来&#xff0c;以下示例为组合式api 更多教程参考官网&#xff1a;pinia官网https://pinia.vuejs.org/zh/ 安装…

无线网优AP、SW发现控制器

目录 无线网优解决的问题 1、信号覆盖不足的原因 2、信道繁忙 3、非802.11干扰 4、协商速率低 5、漫游效果差 6、有线带宽阻塞 无线网优方法 交换机发现与激活 一&#xff0c;交换机发现控制器方式 1、二层广播 2、DHCP option43方式 3、DNS域名解析方式 4、trou…

创建vue3数学符号选择器(vue3+elementPlus+ts)

本文包含两种效果&#xff1a; 效果一&#xff1a;数学符号只能选择一次&#xff0c;选中的数学符号高亮 效果二&#xff1a;相同的数学符号可以选择多次&#xff0c;当前选中的数学符号高亮 首先创建math.ts定义常见数学符号数组 : export const symbols [{ id: 1, value: …

Flutter桌面应用程序定义系统托盘Tray

文章目录 概念实现方案1. tray_manager依赖库支持平台实现步骤 2. system_tray依赖库支持平台实现步骤 3. 两种方案对比4. 注意事项5. 话题拓展 概念 系统托盘&#xff1a;系统托盘是一种用户界面元素&#xff0c;通常出现在操作系统的任务栏或桌面顶部。它是一个水平的狭长区…

物联网水表和4G水表的区别有哪些?

随着科技的发展&#xff0c;水表也不再是传统的机械表&#xff0c;而是经过数字化和智能化改造的物联网水表和4G水表。这两种水表具有很多的不同点。那么&#xff0c;物联网水表和4G水表的区别有哪些&#xff1f; 首先&#xff0c;物联网水表和4G水表的通信方式不同。物联网水表…

指针进阶知识超详细讲解(C语言)(中)

前言 苦苦等待&#xff0c;终于迎来了我们的指针讲解第二期&#xff0c;如果有还没有看过上一期的小伙伴&#xff0c;那赶紧点击这个链接学习后再来看这篇博客吧。链接&#xff1a;指针基础知识超详细讲解&#xff08;C 语言&#xff09;&#xff08;上&#xff09; 如果对学习…

Leetcode1423. 可获得的最大点数

Every day a Leetcode 题目来源&#xff1a;1423. 可获得的最大点数 解法1&#xff1a;前缀和 后缀和 基于贪心的思想&#xff0c;要使得获得的点数最大&#xff0c;每次拿卡牌都应该选点数尽量高的卡牌。 但是拿卡牌有限制&#xff0c;每次行动&#xff0c;只可以从行的…