コマンドライン 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

同じ入力を与えると、両方のコマンドは同じ結果を提供します。他の出力が出てきた場合は、ツールの1つにバグがあるか(低い可能性がある)、同じ入力を渡さないでください。気づく:

  • SECRETランダムに生成されたキーでなければなりません。このキーの各バイトは0になる確率が1/256です。コマンドラインではnullバイトを渡すことはできません。
  • HMACへの入力は一連のバイトです。 JavaScriptコードが入力をテキストとして読み込み、エンコーディングを変更したりスペースを変更したりすると、他のMACが発生します。
  • 特に、末尾の改行を追加または削除していないことを確認してください。
  • 特に、UnixとWindowsの行末が変更されていないことを確認してください。

関連情報