【问题标题】:How to decrypt string with iv in node.js without getting "Error: Invalid key length"?如何在 node.js 中使用 iv 解密字符串而不会出现“错误:密钥长度无效”?
【发布时间】:2019-11-21 13:06:55
【问题描述】:

我有一些需要解密的数据。它是用'aes-256-ctr'算法加密的,我的密钥是'77d51976-94b1-43af-83a3-9e02fe5c05c8'(显然这不是我真正的密钥,它只是为了示例!),以及每条数据有相应的IV。

例如,在 PHP 中,这个:

openssl_decrypt('PZ9qCKIi77nR', 'aes-256-ctr', '77d51976-94b1-43af-83a3-9e02fe5c05c8', 0, '4195698429565026');

按预期产生未加密的字符串“client-id”。

然后存储加密的数据,我想在 node.js 应用程序中对其进行解密。但是当我运行时:

crypto.createDecipheriv('aes-256-ctr', '77d51976-94b1-43af-83a3-9e02fe5c05c8', '4195698429565026');

我收到“错误:密钥长度无效”。我不清楚为什么加密期望密钥的特定长度,以及该长度是多少或如何调试它。

我的问题是如何用 node.js 破译以下数据集:

  • 加密:“PZ9qCKIi77nR”
  • 算法:'aes-256-ctr'
  • 键:'77d51976-94b1-43af-83a3-9e02fe5c05c8'
  • iv: '4195698429565026'

【问题讨论】:

    标签: node.js encryption


    【解决方案1】:

    您的密钥长度错误。 AES 密钥的长度必须精确为 16、24 或 32 字节,并且应该是完全随机的字节序列。您的密钥是一个 36 字节长的 ASCII 字符串。

    我怀疑openssl_decrypt 只是忽略连字符,然后将此字符串十六进制解码为 128 位(16 字节)密钥。

    我怀疑createDecipheriv 将其视为 UTF-8 编码的字符串,而不是十六进制编码的字符串,这意味着即使删除连字符,也会得到完全不同的值。

    要匹配 PHP,您可能需要将连字符和十六进制解码为 Buffer 或 KeyObject 而不是字符串。

    【讨论】:

      猜你喜欢
      • 2021-06-17
      • 1970-01-01
      • 2022-09-26
      • 1970-01-01
      • 1970-01-01
      • 2018-09-23
      • 1970-01-01
      • 2010-12-18
      • 1970-01-01
      相关资源
      最近更新 更多