Netsuite AES 加密密钥/iv 大小不正确

问题描述 投票:0回答:1

因此,我从 Orcales NetSuite 收到一个文件,该文件已通过 NetSuite 使用 AES-256-CBC 加密进行加密。 然而,在尝试使用给定的 key/iv(已验证其在 NetSuite 密钥文件中确实拥有的密钥/iv)对其进行解密时,我注意到密钥和 iv 都是 32 字节长,这是不正确的。 对于 AES-256,IV 应为 16 字节长。 我假设我可能需要解码这些字符串,所以我通过 javascript 的 Node Forge 库运行它

forge.util.decode64(iv)

但传入的值相同,32 字节。

有没有人有 NetSuite 加密经验可以告诉我到底发生了什么? 我根本找不到任何关于此的文档。

这是我从 NetSuite 获取的密钥文件的示例(显然不是实际值):

{"key":"ZC9TZW5iQzQzRGlJOG0yZ3MzQ2NHR3hjOXQwRjBxcG8=","iv":"MTI2NWMwZDU4ZTU4ODZkYjE3MjNhYjJhMzc0M2IzZjk="}

encryption cryptography aes netsuite
1个回答
0
投票

看起来 IV 实际上被编码为十六进制,然后编码为 Base64。 这导致长度加倍,因为它从 8 位字符变为 4 位十六进制字符。

将 Base64 值解码为二进制数据会产生以下结果:

0000: 31 32 36 35 63 30 64 35
0010: 38 65 35 38 38 36 64 62
0020: 31 37 32 33 61 62 32 61
0030: 33 37 34 33 62 33 66 39

观察这个足够长的时间,你最终会注意到它的熵很低,所有字节的最高位都被清除,并且它们都以 3 或 6(十六进制)开头。

如果您解码 Base64 并将数据解释为十六进制字符串,您将得到: 0000: 12 65 c0 d5 8e 58 86 db 0010: 17 23 ab 2a 37 43 b3 f9

...正好是 16 个字节长。

这个

CipherPayload的文档页面可能有答案(尽管我可能解释错误),其中写着:


注意

:无论 encode.Encoding.HEX 方法中的

options.inputEncoding
参数值如何,此属性都会在
cipher.final
中编码。

这个想法归功于
此评论

© www.soinside.com 2019 - 2024. All rights reserved.