我有一些数据需要解密。它是用'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'
发布于 2019-11-21 13:18:01
你的钥匙长度不对。AES密钥必须精确地为16、24或32字节,并且应该是完全随机的字节序列。您的密钥是一个36字节长的ASCII字符串。
我怀疑openssl_decrypt只是忽略了连字符,然后将这个字符串解码成一个128位(16字节)的键。
我怀疑createDecipheriv将其视为UTF-8编码字符串,而不是十六进制编码的,这意味着即使删除连字符,也会得到一个完全不同的值。
要匹配PHP,您可能需要将连字符和十六进制解码成缓冲区或KeyObject,而不是字符串。
https://stackoverflow.com/questions/58975816
复制相似问题