首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在node.js中使用iv解密字符串而不获得“错误:无效密钥长度”?

如何在node.js中使用iv解密字符串而不获得“错误:无效密钥长度”?
EN

Stack Overflow用户
提问于 2019-11-21 13:06:55
回答 1查看 302关注 0票数 0

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

例如,在PHP中,以下内容:

代码语言:javascript
复制
openssl_decrypt('PZ9qCKIi77nR', 'aes-256-ctr', '77d51976-94b1-43af-83a3-9e02fe5c05c8', 0, '4195698429565026');

结果未加密的字符串"client-id“与预期的一样。

然后,将加密的数据存储起来,我想在node.js应用程序中解除它的加密。然而,当我跑步时:

代码语言:javascript
复制
crypto.createDecipheriv('aes-256-ctr', '77d51976-94b1-43af-83a3-9e02fe5c05c8', '4195698429565026');

我得到“错误:无效密钥长度”。我不清楚为什么密码需要一个密钥的特定长度,以及这个长度是多少,或者如何调试这个长度。

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

加密的'PZ9qCKIi77nR'

  • algorithm:'aes-256-ctr'

  • key:'77d51976-94b1-43af-83a3-9e02fe5c05c8'

  • iv:'4195698429565026'

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-21 13:18:01

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

我怀疑openssl_decrypt只是忽略了连字符,然后将这个字符串解码成一个128位(16字节)的键。

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

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58975816

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档