Openssl
命令行 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();
為文本 JSON 文件內容生成與 Node.JS 中相同的結果。但是 Linux 命令行 HMAC 計算會產生不同的雜湊碼:
> openssl sha256 -hmac "SECRET" filename
命令行有什麼問題?什麼是正確的
openssl
論點?
如果您提供相同的輸入,這兩個命令會給出相同的結果。如果您得到不同的輸出,那麼您的任何一個工具都有錯誤(這不太可能),或者您沒有傳遞相同的輸入。注意:
SECRET
應該是隨機生成的密鑰。此鍵的每個字節都有 1/256 的機會為 0。您不能在命令行上傳遞空字節。- HMAC 的輸入是一串字節。如果 JavaScript 程式碼將輸入讀取為文本並更改其編碼或修改其空格,則會導致不同的 MAC。
- 特別是,檢查您是否沒有添加或刪除尾隨換行符。
- 特別是,檢查您沒有在 Unix 和 Windows 行結尾之間進行更改。