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の行末が変更されていないことを確認してください。