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

前言:

在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不存在,返回nullconst e = require('crypto'), // Node.js的crypto模块y = someFormatterFunction; // 假设存在一个处理密钥和IV的函数// 构建固定长度的密钥和初始化向量IVconst 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.mzph.cn/news/200648.shtml

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

相关文章

java google.zxing解析二维码工具类

文章目录 pom代码解析用例生成二维码用例 pom <dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.3.0</version> </dependency>代码 import com.google.zxing.*; import com.google…

通俗理解Jenkins是什么?

目录 通俗理解 Jenkins是什么&#xff1f; 通俗理解 假设你有一个软件项目&#xff0c;多个开发者在一起写代码。每当有人提交新的代码时&#xff0c;你想要自动地构建、测试这些代码&#xff0c;确保它们没有引入问题。 Jenkins就像一个聪明的助手&#xff0c;会在有人提交…

【数据仓库-10】-- 数据仓库、数据湖和湖仓一体对比

目录 1 数据仓库与数据库的对比 2 数据湖与数据仓库的对比 3 数据仓库、数据湖和湖仓一体

检查 `/var` 是否有自己的独立分区

要检查 /var 是否有自己的独立分区&#xff0c;您可以使用以下方法&#xff1a; 1. 使用 df 命令 df 命令&#xff08;磁盘文件系统&#xff09;可以用来报告文件系统的磁盘空间使用情况。要查看 /var 的情况&#xff0c;请运行&#xff1a; df -h /var这个命令会显示 /var …

在AWS Lambda中使用FFmpeg处理m3u8视频流

大纲 1 部署有FFmpeg功能的Lambda环境1.1 部署层1.2 部署代码1.2.1 FFmpeg指令1.2.2 代码 2 配置Lambda角色权限2.1 选择角色类型2.2 设置权限2.3 保存角色2.4 绑定角色 参考文献 在直播里领域&#xff0c;我们经常需要对视频流进行处理。FFmpeg则是该领域中处理的利器。这篇文…

根文件系统的开机自启动测试

一. 简介 本文在之前制作的根文件系统可以正常运行的基础上进行的&#xff0c;继上一篇文章地址如下&#xff1a; 完善根文件系统-CSDN博客 在前面测试软件hello 运行时&#xff0c;都是等 Linux 启动进入根文件系统以后手动输入 “./hello” 命令 来完成的。 我们一般做好产…

C++:一个函数返回值的小问题

今天一位同学问了我这样一个问题&#xff1a; int& getDState() { return _dstate; } int getDState() { return _dstate; }这两个函数有什么区别&#xff1f; 这两个返回一个名为 _dstate 的成员变量或变量。函数的返回类型不同&#xff0c;在C中是不允许的&#xff0c;…

Python计算方差

方差可以反应变量的离散程度&#xff0c;是因为它度量了数据点与均值的差异。方差是每个数据点与均值的差的平方和的平均值&#xff0c;它可以反映数据点在均值附近的分布情况。如果方差较小&#xff0c;说明数据点更加集中在均值附近&#xff0c;离散程度较小&#xff1b;如果…

uniapp微信小程序分包,小程序分包

前言&#xff0c;都知道我是一个后端开发、所以今天来写一下uniapp。 起因是美工给我的切图太大&#xff0c;微信小程序不让了&#xff0c;在网上找了一大堆分包的文章&#xff0c;我心思我照着写的啊&#xff0c;怎么就一直报错呢&#xff1f; 错误原因 tabBar的页面被我放在分…

【JSD1209考试】题目与解答

选择题 在Java Applet程序中&#xff0c;如果对发生的事件做出响应和处理的时候&#xff0c;应该使用的语句是&#xff1f; ( C ) &#xff08;1分&#xff09; A. import java.awt.*;B. import java.applet.*;C. import java.awt.event.*;D. import java.io.*; 以下返回true的…

【从零开始学习JVM | 第一篇】快速了解JVM

前言&#xff1a; 在探索现代软件开发的丰富生态系统时&#xff0c;我们不可避免地会遇到一个强大而神秘的存在——Java虚拟机&#xff08;JVM&#xff09;。作为Java语言最核心的组成之一&#xff0c;JVM已经超越了其最初的设计目标&#xff0c;成为一个多语言的运行平台&…

JavaScript包管理器分类和区别

一、JavaScript包管理器分类 NPMYarnPNPMBun 二、包管理器的区别 1、NPM 是Node.js的默认包管理器&#xff0c;默认随Node.js一起安装&#xff0c;无需额外配置。 npm2 采用简单的递归依赖方法&#xff0c;最后形成高度嵌套的依赖树。然后就会造成如下问题&#xff1a;重复依…

【JavaSE】网络编程(学习笔记)

一、网络编程概述 网络编程&#xff1a;网络互联的计算机实现数据交换 1、网络编程三要素 1&#xff09;IP IP&#xff1a;网络中设备的唯一标识 cmd -> ipconfig&#xff1a;查看本机ip cmd -> ping ip地址&#xff1a;检查网络是否连通 127.0.0.1&#xff1a;回送地…

Ubuntu环境下使用nginx实现强制下载静态资源

安装Nginx sudo apt update sudo apt install nginx关闭防火墙 sudo ufw allow Nginx HTTP修改nginx配置 cd /etc/nginx/conf.d vi nginx.conf在http配置中添加(/your path/为需要下载的文件路径) server {listen 80;server_name localhost;location / {root /your path/…

convert_from_pinhole_camera_parameters 失败

函数convert_from_pinhole_camera_parameters 在0.17版本中有bug。 应该说是&#xff0c;直接使用pip install open3d 的0.17版本有问题&#xff0c;在git code中已经修复&#xff0c;需要下载后用pip安装。希望pip赶紧更新。。。。 参考&#xff1a; Fix the pybind refer…

WPS Office JS宏实现批量处理Word中的标题和正文的样式

该篇讲解下word文档中的标题和正文批量修改样式&#xff0c;如下图&#xff1a; 前面一篇已讲解了WPS Office宏编辑器操作方法&#xff0c;这里不细讲了&#xff0c;如有不清楚可以查看该篇&#xff1a;https://blog.csdn.net/jiciqiang/article/details/134653657?spm1001.20…

Install4J安装界面中如何使用脚本找到依赖程序XShell的安装位置

前言 写了一个工具, 使用Install4j打包, 但因为需要用到XShell, 所以希望在安装界面能够提前让用户配置好XShell的安装位置, 所以对Install4j的安装界面需要自定义, 后期在程序中直接过去安装位置就可以正常使用. 调研 和git-bash不一样, 安装版的XShell没有在注册表里存储安…

Ubuntu系统下使用apt-get安装Redis

记录一下Ubuntu20.04 64位系统下使用apt-get安装Redis 首先检查一下系统是否安装过redis whereis redismywmyw-K84HR:~$ whereis redis redis: mywmyw-K84HR:~$ 更新软件包 sudo apt-get update -y安装redis sudo apt-get install redis-server -ymywmyw-K84HR:~$ sudo apt…

数字ic设计技巧:添加debug信号

数字ic设计技巧&#xff1a;添加debug信号 文章目录 数字ic设计技巧&#xff1a;添加debug信号1. 握手方式读取数据的debug信号o_wait_read2. FIFO的空满信号3. 输入错误4. 多状态机的debug信号5. 使用FIFO记录log 在数字ic设计的过程中&#xff0c;我们常常通过添加一些debug信…

Java常见CodeReview及编码规范

鉴于自己的开发经验,以及常见容易产生bug及性能问题的点做个记录. 1.数据库 如果开发人员的经验不足,Java通过ORM(Mybatis)对数据库的操作的性能问题比较隐蔽.因为不压测或者异常case没发生的时候一般发现不了问题.特别是异常case发生的时候. 除配置表以外的sql都要经过expl…