命令行 HMAC 计算与 Node.JS crypto.createHmac('sha256') 不同

命令行 HMAC 计算与 Node.JS crypto.createHmac('sha256') 不同

在 Node.js 中我使用以下代码

hash = crypto.createHmac('sha256', SECRET).update(fileContent).digest('hex');

计算 HMAC。 C++/Qt 代码模拟

QByteArray hash = QMessageAuthenticationCode::hash(
           fileContent, SECRET, QCryptographicHash::Sha256).toHex();

生成与 Node.JS 中文本 JSON 文件内容相同的结果。然而,Linux 命令行 HMAC 计算会产生不同的哈希码:

> openssl sha256 -hmac "SECRET" filename

命令行有什么问题?什么是正确的openssl论点?

答案1

如果您提供相同的输入,这两个命令将给出相同的结果。如果你得到不同的输出,那么你的工具之一有错误(这不太可能)或者你没有传递相同的输入。注意:

  • 应该SECRET是随机生成的密钥。该密钥的每个字节有 1/256 的机会为 0。您不能在命令行上传递空字节。
  • HMAC的输入是一串字节。如果 JavaScript 代码将输入读取为文本并更改其编码或修改其空格,则会产生不同的 MAC。
  • 特别是,检查您是否没有添加或删除尾随换行符。
  • 特别是,请检查 Unix 和 Windows 行结尾之间是否未发生更改。

相关内容