- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我刚刚移至 Node 12.13,并且 crypto.createDecipher
和 crypto.createCipher
遇到一些问题
首先,当我使用这两个函数时,我收到了弃用警告。
const encodeString = (value, password) =>
new Promise((resolve, reject) => {
const cipher = crypto.createCipher("aes192", password);
let encrypted = "";
cipher.on("readable", () => {
const data = cipher.read();
if (data) encrypted += data.toString("hex");
});
cipher.on("end", () => resolve(encrypted));
cipher.write(value);
cipher.end();
});
const decodeString = (encrypted, password) =>
new Promise((resolve, reject) => {
const decipher = crypto.createDecipher("aes192", password);
let decrypted = "";
decipher.on("readable", () => {
const data = decipher.read();
if (data) decrypted += data.toString("utf8");
});
decipher.on("end", () => resolve(decrypted));
decipher.write(encrypted, "hex");
decipher.end();
});
data()
.then(data => {
console.log("final", data);
})
.catch(err => {
console.log("final err", err);
});
我正在寻找一种迁移到 createCipheriv
和 createDecipheriv
的方法,但我找不到如何将密码转换为 key 和 iv
最佳答案
找到以下方法来生成 key 和 IV 以及实现方法
const keyBytes: Buffer = Buffer.from(password, 'base64');
// Generates 16 byte cryptographically strong pseudo-random data as IV
// https://nodejs.org/api/crypto.html#crypto_crypto_randombytes_size_callback
const ivBytes: Buffer = crypto.randomBytes(16);
const ivText: string = ivBytes.toString('base64');
加密
export function encryptString(plainText: string, secret: string): string {
if (!plainText || plainText.length === 0) {
return plainText;
}
if (!secret || secret.length === 0) {
throw new Error('you must pass a secret');
}
const keyBytes: Buffer = Buffer.from(secret, 'base64');
// Generates 16 byte cryptographically strong pseudo-random data as IV
// https://nodejs.org/api/crypto.html#crypto_crypto_randombytes_size_callback
const ivBytes: Buffer = crypto.randomBytes(16);
const ivText: string = ivBytes.toString('base64');
// encrypt using aes256 iv + key + plainText = encryptedText
const cipher: crypto.Cipher = crypto.createCipheriv('aes-256-cbc', keyBytes, ivBytes);
let encryptedValue: string = cipher.update(plainText, 'utf8', 'base64');
encryptedValue += cipher.final('base64');
// store base64(ivBytes)!base64(encryptedValue)
return `${ ivText }!${ encryptedValue }`;
}
解密
export function decryptString(encryptedValue: string, secret: string):string {
if (!encryptedValue || encryptedValue.length === 0) {
return encryptedValue;
}
if (!secret || secret.length === 0) {
throw new Error('you must pass a secret');
}
const parts: string[] = encryptedValue.split('!');
if (parts.length !== 2) {
throw new Error('The encrypted value is not a valid format');
}
const ivText: string = parts[0];
const encryptedText: string = parts[1];
const ivBytes: Buffer = Buffer.from(ivText, 'base64');
const keyBytes: Buffer = Buffer.from(secret, 'base64');
if (ivBytes.length !== 16) {
throw new Error('The encrypted value is not a valid format');
}
if (keyBytes.length !== 32) {
throw new Error('The secret is not valid format');
}
// decrypt using aes256 iv + key + encryptedText = decryptedText
const decipher: crypto.Decipher = crypto.createDecipheriv('aes-256-cbc', keyBytes, ivBytes);
let value: string = decipher.update(encryptedText, 'base64', 'utf8');
value += decipher.final('utf8');
return value;}
关于node.js - 迁移 createCipher 和 createCipheriv,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58751923/
我使用下面的代码来加密我的node.js 代码中的字符串。 我想了解如何从静态源生成 KEY 和 HMAC_KEY。在我的程序中,到目前为止它是随机生成的。由于它是随机生成的,我无法使用以下算法加密我
我刚刚移至 Node 12.13,并且 crypto.createDecipher 和 crypto.createCipher 遇到一些问题 首先,当我使用这两个函数时,我收到了弃用警告。 const
我在 NodeJS v8.11.0 中使用这段代码生成了一个 base64 编码的 key : const secret = 'shezhuansauce'; const key = crypto.c
我目前正在尝试使用 NodeJS 加密静态数据,我在 Node API 文档中读到 createCipher 不是 recommended . The implementation of crypto
我创建了一个传递两个缓冲区的密码。 buf1 是它们的键,一个 32 字节的缓冲区,而 buf2,即 IV,也是一个 32 字节的缓冲区,我将其切片为仅使用 16 字节。文档说 cipher.upda
我正在尝试使用 node.js 加密模块加密文本。 代码如下: const crypto = require('crypto'); const password = 'password'; const
我很难找到一些信息。有谁知道值是否从 cipher.getAuthTag() 返回 (--> 返回 MAC) 可以公开吗? TL;DR Can a message authentication cod
我看到其他问题询问关于为 encryption 创建初始化向量 (IV)似乎使用随机值是一种选择。但是,我需要生成用于解密的 IV,因此我必须使用基于一些盐加密数据的同一个 IV。 node.js 加
以下是 multipassify 的来源. 该代码在 Node 6 下完美运行,但之后会出现错误。 错误如下所示: crypto.js:184 this._handle.initiv(cipher
在 node.js 的应用程序中,我使用 crypto module用于对称加密/解密。 我正在使用 AES-256-CTR。我最初假设 crypto.createCipher将“只是工作”和“挥手”
我是一名优秀的程序员,十分优秀!