Openssl

命令行 HMAC 計算不同於 Node.JS crypto.createHmac(‘sha256’)

  • June 27, 2018

在 Node.js 中,我使用以下程式碼

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

計算 HMAC。C++/Qt 程式碼模擬

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

為文本 JSON 文件內容生成與 Node.JS 中相同的結果。但是 Linux 命令行 HMAC 計算會產生不同的雜湊碼:

> openssl sha256 -hmac "SECRET" filename

命令行有什麼問題?什麼是正確的openssl論點?

如果您提供相同的輸入,這兩個命令會給出相同的結果。如果您得到不同的輸出,那麼您的任何一個工具都有錯誤(這不太可能),或者您沒有傳遞相同的輸入。注意:

  • SECRET應該是隨機生成的密鑰。此鍵的每個字節都有 1/256 的機會為 0。您不能在命令行上傳遞空字節。
  • HMAC 的輸入是一串字節。如果 JavaScript 程式碼將輸入讀取為文本並更改其編碼或修改其空格,則會導致不同的 MAC。
  • 特別是,檢查您是否沒有添加或刪除尾隨換行符。
  • 特別是,檢查您沒有在 Unix 和 Windows 行結尾之間進行更改。

引用自:https://unix.stackexchange.com/questions/450215