NodeJS 中的 Rijndael 256 CBC PKCS7 加密/解密

2023-12-26

我正在为一项服务构建一个 NodeJS 客户端,该服务使用 256 位块 Rijndael CBC 和 PKCS7 填充来加密数据。

我看过 NodeJS 中的几个 Rijndael 实现,但似乎没有一个提供我正在寻找的组合。

如何使用Rijndael算法实现加密?

关于如何在 NodeJS 中实现这一点有什么建议吗?


我在这里发布了我能够找到的解决方案,以防将来有人遇到同样的问题。

实际上,通过组合两个模块,使用 Rijndael 256 块大小和 PKCS7 填充来加密/解密非常容易rijndael-js and pkcs7-padding可从 NPM 注册表获取。

rijndael-js模块允许您使用各种块大小进行加密/解密:128、256 和 192 块大小 - 但是,它仅支持零填充。不提供 PKCS7 填充支持。因此,您要么需要依赖另一个模块来进行 PKCS7 填充,要么自己完成(这也不是那么困难)。

rijndael-js如果明文(要加密的数据)的长度不是块大小的倍数,则只会对明文(要加密的数据)进行零填充。为了防止它进行零填充,您的数据必须在加密之前首先填充明文。在下面的示例中,我使用pkcs7-paddingnpm 的模块。

npm install rijndael-js pkcs7-padding --save

这就是加密数据的方式

const Rijndael = require('rijndael-js');
const padder = require('pkcs7-padding');
const crypto = require('crypto');

const plainText = Buffer.from('Here is my plain text', 'utf8');
//Pad plaintext before encryption
const padded = padder.pad(plainText, 32); //Use 32 = 256 bits block sizes

const key = crypto.randomBytes(32); //32 bytes key length
const iv = crypto.randomBytes(32); //32 bytes IV

const cipher = new Rijndael(key, 'cbc'); //CBC mode
const encrypted = cipher.encrypt(padded, 256, iv);

这是解密数据的方法

const encrypted = ... //holds our encrypted data
const key = ... // holds our 32 bytes key
const iv = ... //holds our 32 bytes iv

const decipher = new Rijndael(key, 'cbc');
const decryptedPadded = decipher.decrypt(encrypted, 256, iv);
//Remember to un-pad result
const decrypted = padder.unpad(decryptedPadded, 32);
const clearText = decrypted.toString('utf8');

console.log(clearText); //-> Here is my plain text
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

NodeJS 中的 Rijndael 256 CBC PKCS7 加密/解密 的相关文章

  • Nodejs Base64 中的读取文件

    我正在尝试从客户端读取以 base64 编码的图像 如何使用nodejs进行阅读 My code add to buffer base64 image var encondedImage new Buffer image name base
  • ElectronJS 捕获屏幕质量低

    我正在使用 ElectronJS 测试屏幕捕获 我可以捕获屏幕 但捕获的视频质量低于原始视频 操作系统 Linux Mint 20 电子版本 11 1 0 这是我的代码 我选择我的屏幕 然后使用以下命令在电子应用程序中显示捕获的屏幕vide
  • 在 iframe/对象标签内运行时更新初始路由器 url

    我目前正在容器 主 Vue 应用程序的对象标签 iframe 也可以工作 内渲染 Vue 应用程序 首先 我设置一个文件服务器 为该容器或请求的子应用程序提供服务 以在 div 内呈现 为了简单起见 我将仅显示 Node Express 服
  • socket.io 服务器的 Node.js 客户端

    我有一个正在运行的 socket io 服务器和一个带有 socket io js 客户端的匹配网页 一切正常 但是 我想知道是否可以在另一台机器上运行一个单独的 node js 应用程序 该应用程序将充当客户端并连接到提到的 socket
  • 使用 NodeJS 从 GCP 存储下载对象

    我在用着 google cloud 存储 https www npmjs com package google cloud storage从节点应用程序访问 Google Cloud Storage 存储桶内的对象 但我无法使其工作 我已在
  • 使用sequelize 根据express.js 中的路由更改数据库连接

    是否可以更改数据库连接sequelize取决于路线 例如 用户可以访问网站中的 2 个不同安装 example com foo example com bar 登录后用户将被重定向到example com foo为了获得他们的所有任务foo
  • 在 ExpressJS 中通过管道传送远程文件

    我想读取远程图像并显示它 我可以保存文件 但无法正确显示代码 理想情况下 我只想直接传递文件而不进行处理 不确定是否需要 tmp 文件步骤 此代码不显示任何内容 没有错误 我也尝试了 res pipe response var url ht
  • 如何使用restify上传文件

    我正在尝试使用 Restify 模块将图像文件上传到 Rest 服务器 更具体地说是 Confluence 但出现断言错误 我不确定我是否使用正确的方法将文件上传到 REST 服务器 有人能指出我正确的方向吗 这是我的尝试 var rest
  • 在 ExpressJS 中为特定路由链接多个中间件

    我只想验证一些东西 但无法在 Express 文档或在线中找到与此相关的任何内容 尽管我知道这是一个功能 我可以测试一下 但我真的没有一个好的模板 并且希望听到社区的意见 如果我像这样在express中定义一条路线 app get func
  • npm install -D sass-loader node-sass Vue.js 2021

    您好 问题是为 Vue js 设置 SASS 我跑 Node js 15 7 0 Vue js vue cli 4 5 11 这是我在运行此命令时在控制台中遇到的错误 npm install D sass loader 节点 sass np
  • JavaScript 中的 Promise.all:如何获取所有 Promise 的解析值?

    我编写了以下node js文件 var csv require csv parser var fs require fs var Promise require bluebird var filename devices csv var d
  • 嵌套对象的 AJV 模式验证

    函数返回的对象看起来像这样 answer vehicle type 1 message Car model VW color red 答案 对象始终存在 其他字段基于 vehicle type E g 如果vehicle type 1 则有
  • Node.js 和 Express:异步操作后如何返回响应

    我是 Node js 新手 所以我仍然对异步函数和回调很感兴趣 我现在的难题是如何在异步操作中从文件读取数据后返回响应 我的理解是发送回复的工作方式如下 这对我有用 app get search function req res res s
  • 如何使用nodejs/aws-sdk将base64编码的pdf直接上传到s3?

    我正在尝试使用以下代码将 base64 编码的 pdf 上传到 S3 而无需将文件写入文件系统 const AWS require aws sdk exports putBase64 async object name buffer buc
  • Node.js 解析路由的最小函数

    我有一个 Node js Express 应用程序正在运行 它接收如下路由 app get resource res someFunction app get foo bar id someOtherFunction 这很棒并且工作正常 我
  • 如何验证最终用户经过身份验证的令牌(使用 Firebase 身份验证)来调用 google cloud run 端点?

    请帮助使用 firebase 身份验证在云运行中进行最终用户身份验证 简短的介绍 我从 firebase 函数提交 Authorization Bearer idToken 标头 并使用电子邮件 密码 firebase 用户进行身份验证的
  • 如果 node_modules 目录存在,Azure 模拟器无法启动 Web 角色

    我想我只是偶然发现了一个非常奇怪的问题 我有一个相当大的解决方案 包括一个具有 3 个角色 两个工作角色和一个 Web 角色的 Azure 项目 Web角色基于asp net mvc和web api 昨天尝试 gulp 用于编译和捆绑较少的
  • 数据包无序。得到:80 预期:0 node.js

    这是我的 非常简单 代码 var connection mysql createConnection infosDB connection connect connection query SELECT FROM action functi
  • 使用 PassportJS 和 Connect for NodeJS 对 Facebook 用户进行身份验证

    我正在尝试使用 connect 将 Passport 集成到我的 NodeJS 服务器中 但似乎无法正确执行 所有指南 示例都使用expressJS 因此我尽力重新格式化代码以与我的代码一起使用 但我似乎无法让它工作 相关部分写在下面 有人
  • Nest.js - 在猫鼬模式中创建索引

    如何使用 Nest js 在猫鼬模式中创建属性索引 我尝试添加索引作为属性选项 但索引尚未创建 Schema export class Schema extends Document Prop id string Prop required

随机推荐

  • mysqli_multi_query 是异步的吗?

    databases array path Path To Directory main link mysqli connect localhost USERNAME PASSWORD files scandir path ignore fi
  • codeSandBox (React/Node) 的 Http 请求错误

    我在 CodeSandBox StackBlitz 等在线 IDE 中遇到奇怪的错误 我做了一个示例 http 请求 使用 axios 但使用 fetch 或其他问题是相同的 并尝试在控制台中打印响应 我在前端使用 React 在后端使用
  • 在 foreach 循环外部使用 foreach 循环的变量

    我有一个 foreach 循环 我在循环内创建了一个字符串 但我想在循环外使用 var 这可能吗 List
  • .NET版本和C#版本之间的关系? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 如何确定可以针对特定 NET Framework 版本使用哪个版本的 C 我读过了 https sta
  • Git 精选语法和合并分支

    所以我之前已经做过无数次樱桃挑选 看来我现在必须在生活中失败 我正在尝试从一个分支挑选到另一个分支 这应该很容易 但是我收到了关于它是合并的错误 但是没有给出 m 吗 git cherry pick a8c5ad438f6173dc34f6
  • Mono无法打开sqlite数据库

    我正在尝试对 sqlite v3 数据库进行非常基本的连接 并且我正在使用 monodevelop 3 0 和 Mono 2 10 但无法连接到数据库 我可以让应用程序创建数据库 但随后它尝试连接到数据库时立即失败 有什么建议么 我从不同的
  • 查找可点击的元素

    有没有办法找到用 click 或 live click 指定的所有可点击元素 如果单击任何此类元素 我想执行一些操作 container bind click function event actions 这个捕获所有点击 Thanks 这
  • 如何使用时区偏移格式化 LocalDateTime

    我尝试这样做 ZoneOffset zoneOffset ZoneOffset ofHours 3 DateTimeFormatter fmt DateTimeFormatter ofPattern HH mm ss LocalDateTi
  • 如何确定我的 iOS 设备是否有手电筒?

    在我的应用程序中 我可以选择手电筒 然而 只有 iPhone 4 和 iPhone 4S 有手电筒灯 其他设备没有手电筒灯 如何找到当前设备型号 请帮我 提前致谢 您不应使用设备型号作为是否存在某项功能的指示符 相反 请使用 API 来准确
  • blur.js 尝试请求“none”并且 div 未扩展 100%

    我正在尝试使用http blurjs com http blurjs com 模糊标题栏的标题图像的背景 然而 它给了我一个有趣的错误 我似乎无法追踪 这可能与主要代码和兼容性有关 但我不确定 http jordan rave5 com t
  • 在 Numpy(或 Scipy)中计算斜率

    我正在尝试找到使用 Numpy 和 Scipy 计算斜率的最快 最有效的方法 我有一组由三个 Y 变量和一个 X 变量组成的数据集 我需要计算它们各自的斜率 例如 我可以轻松地一次一行执行此操作 如下所示 但我希望有一种更有效的方法来执行此
  • 按下 iOS swift 后更改 UIBarButtonItem 图标

    In the viewDidload方法 我声明了一个按钮并设置了 RightBarButton let btnFavourite UIButton frame CGRectMake 0 0 30 30 btnFavourite addTa
  • 找不到任何与 com.google.android.gms 匹配的版本:strict-version-matcher-plugin:[15.0.0, 16.0.0)

    项目一直运行良好 直到前两天突然出现错误 我不知道如何解决它 因为我已经做了我能做的一切 包括重新安装 android studio 和 gradle 无法解析配置 app debugCompileClasspath 的所有文件 找不到与
  • Array.push 返回推送值?

    是否有任何实质性原因需要修改Array push 返回推送的对象而不是新数组的长度可能是一个坏主意 我不知道这是否已经被提议或询问过 谷歌搜索只返回了大量与当前功能相关的问题Array push 这是此功能的示例实现 请随意更正它 func
  • ChildNode 类型上不存在属性“tagName”[Typescript]

    我正在从父节点循环子节点 我想访问子节点的 tagName 但错误是 tagName 在类型 ChildNode 上不存在 const contentParsed new DOMParser parseFromString content
  • 创建 LocalDB 以从 Visual Studio SQL 项目进行测试

    我正在尝试为我的项目创建集成测试 我需要测试一个通过存储库调用存储过程的控制器 应在每次运行某些范围的测试时创建一个空数据库 所以我将实施以下步骤 Create LocalDB 运行一些预脚本 以添加测试数据 Run test 运行一些后脚
  • GIMP的图层合成/混合方法

    在我寻求为 Matlab 中的图像混合工具添加 Alpha 功能时 我遇到了一些障碍 其中 我一直在使用these http ssp impulsetrain com porterduff html links http www adobe
  • 显示一个 div,单击时隐藏所有其他 div

    我有一个简单的图像 视频库 我想用 jQuery 制作动画 我想要做的就是 当有人点击链接时 big具有相同ID的div被设置为display block opacity 1所有其他 div 都设置为display none opacity
  • 将多通道 PyAudio 转换为 NumPy 数组

    我能找到的所有例子都是单声道的 CHANNELS 1 如何使用 PyAudio 中的回调方法读取立体声或多声道输入并将其转换为 2D NumPy 数组或多个 1D 数组 对于单声道输入 类似这样的工作 def callback in dat
  • NodeJS 中的 Rijndael 256 CBC PKCS7 加密/解密

    我正在为一项服务构建一个 NodeJS 客户端 该服务使用 256 位块 Rijndael CBC 和 PKCS7 填充来加密数据 我看过 NodeJS 中的几个 Rijndael 实现 但似乎没有一个提供我正在寻找的组合 如何使用Rijn