gpt4 book ai didi

node.js - Rijndael 256 CBC PKCS7 NodeJS 中的加密/解密

转载 作者:行者123 更新时间:2023-12-04 12:43:41 34 4
gpt4 key购买 nike

我正在为使用带有 PKCS7 填充的 256 位 block Rijndael CBC 加密数据的服务构建 NodeJS 客户端。

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

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

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

最佳答案

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

通过组合 NPM 注册表中可用的两个模块 rijndael-jspkcs7-padding,使用带有 PKCS7 填充的 Rijndael 256 block 大小进行加密/解密实际上非常容易.

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

rijndael-js 如果其长度不是 block 大小的倍数,则只会用零填充明文(要加密的数据)。为防止零填充,您的数据必须先填充明文,然后再加密。在下面的示例中,我为此使用了 npm 中的 pkcs7-padding 模块。

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

关于node.js - Rijndael 256 CBC PKCS7 NodeJS 中的加密/解密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54649894/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com