Error: Invalid key length and Error: Invalid IV length using AES-256-CBC algorithm
Error: Invalid key length and Error: Invalid IV length using AES-256-CBC algorithm
我有2个函数用AES-256-CBC算法加解密:
import * as crypto from "crypto";
export const encrypt = (text: string, key: string, iv: string) => {
const cipher = crypto.createCipheriv("aes-256-cbc", key, iv);
let result = cipher.update(text, "utf8", "hex");
result += cipher.final("hex");
return result;
};
export const decrypt = (text: string, key: string, iv: string) => {
const decipher = crypto.createDecipheriv("aes-256-cbc", key, iv);
let result = decipher.update(text, "hex", "utf8");
result += decipher.final("utf8");
return result;
};
问题出在密钥和 IV 上。我必须像这样生成 IV 和密钥:
crypto.randomBytes(8).toString('hex') // IV
crypto.randomBytes(16).toString('hex') // Key
我试图像这样更改长度,但出现了 2 个错误:
crypto.randomBytes(16).toString('hex') // IV
crypto.randomBytes(32).toString('hex') // Key
Error: Invalid key length
和 Error: Invalid IV length
但我发现密钥必须有 32 个字节,而不是 16 个。有什么问题吗?
您 hex-encoding 您的密钥和 IV 不正确。从两者中删除 toString('hex')
,这些参数不能是 hex-encoded.
密钥和IV的正确长度分别是32和16字节。通过 hex-encoding 字符串,您生成的字符串是所需长度的两倍,其中每个字节从 0 到 255 之间的值变为 00
和 [=12 之间的双字符十六进制表示=].
例如字节数组[255, 255, 255]
变成字符数组['f', 'f', 'f', 'f', 'f', 'f']
.
我有2个函数用AES-256-CBC算法加解密:
import * as crypto from "crypto";
export const encrypt = (text: string, key: string, iv: string) => {
const cipher = crypto.createCipheriv("aes-256-cbc", key, iv);
let result = cipher.update(text, "utf8", "hex");
result += cipher.final("hex");
return result;
};
export const decrypt = (text: string, key: string, iv: string) => {
const decipher = crypto.createDecipheriv("aes-256-cbc", key, iv);
let result = decipher.update(text, "hex", "utf8");
result += decipher.final("utf8");
return result;
};
问题出在密钥和 IV 上。我必须像这样生成 IV 和密钥:
crypto.randomBytes(8).toString('hex') // IV
crypto.randomBytes(16).toString('hex') // Key
我试图像这样更改长度,但出现了 2 个错误:
crypto.randomBytes(16).toString('hex') // IV
crypto.randomBytes(32).toString('hex') // Key
Error: Invalid key length
和 Error: Invalid IV length
但我发现密钥必须有 32 个字节,而不是 16 个。有什么问题吗?
您 hex-encoding 您的密钥和 IV 不正确。从两者中删除 toString('hex')
,这些参数不能是 hex-encoded.
密钥和IV的正确长度分别是32和16字节。通过 hex-encoding 字符串,您生成的字符串是所需长度的两倍,其中每个字节从 0 到 255 之间的值变为 00
和 [=12 之间的双字符十六进制表示=].
例如字节数组[255, 255, 255]
变成字符数组['f', 'f', 'f', 'f', 'f', 'f']
.