【Qt】QCryptographicHash 設置密鑰(Key)

QCryptographicHash 本身不能設置密鑰(Key)。

它是一個用于計算非密鑰型加密哈希的函數,其設計目的和 HMAC 或加密算法完全不同。

下面我詳細解釋為什么,以及如何正確地實現你可能想要的功能。

1. QCryptographicHash 的核心功能:無密鑰哈希

QCryptographicHash 的核心功能是接受輸入數據(如一個字符串或文件內容),然后輸出一個固定長度的、唯一的哈希值(摘要)。相同的輸入永遠產生相同的輸出

  • 輸入:數據 (Data)
  • 輸出:哈希值 (Hash/Digest)
  • 特點不需要密鑰。任何人都可以用這個類計算出相同數據的相同哈希值。

它的典型用途是:

  • 驗證文件下載是否完整(計算下載文件的 SHA256 并與官方提供的哈希值對比)。
  • 生成數據的唯一標識符。
  • 用于數字簽名流程的一部分(簽名是使用私鑰對數據的哈希值進行加密,而不是直接加密數據本身)。

2. 如果你需要“帶密鑰的哈希”,你需要的是 HMAC

當你想要驗證一段數據不僅完整,而且來自可信的來源(即擁有密鑰的人)時,就需要用到密鑰。這就是 HMAC 的用途。

  • 輸入:數據 (Data) + 密鑰 (Secret Key)
  • 輸出:消息認證碼 (MAC)
  • 特點必須要有密鑰。只有擁有相同密鑰的人才能計算出相同的 MAC 值。

它的典型用途是:

  • API 請求認證:客戶端使用密鑰對請求參數生成一個簽名(HMAC),服務器用同樣的密鑰驗證簽名,從而確認請求是合法的、未被篡改。
  • JSON Web Tokens (JWT):JWT 的簽名部分就是使用 HMAC 生成的。
  • 任何需要同時保證完整性和真實性的場景。

3. 如何在 Qt 中實現 HMAC(帶密鑰的哈希)

Qt 提供了專門的類 QMessageAuthenticationCode 來計算 HMAC。你應該使用這個類,而不是 QCryptographicHash

示例:使用 QMessageAuthenticationCode 計算 HMAC-SHA256
#include <QMessageAuthenticationCode>
#include <QDebug>int main() {// 你的原始消息QByteArray message = "Important data: user=123, action=delete";// 你的密鑰(必須保密!)QByteArray secretKey = "MySuperSecretKey123!";// 選擇哈希算法(這里以 SHA256 為例)QCryptographicHash::Algorithm hashAlgorithm = QCryptographicHash::Sha256;// 計算 HMACQMessageAuthenticationCode hmacCalculator(hashAlgorithm);hmacCalculator.setKey(secretKey);       // 設置密鑰hmacCalculator.addData(message);        // 添加數據QByteArray result = hmacCalculator.result(); // 計算最終結果QByteArray hmacHex = result.toHex();    // 轉換為十六進制字符串,便于傳輸和存儲qDebug() << "Message:" << message;qDebug() << "HMAC (hex):" << hmacHex;// 輸出類似: "HMAC (hex): a1b2c3d4e5f6..."// --- 驗證端 --- //// 當接收方收到消息和這個HMAC后,可以用同樣的密鑰和算法重新計算一次HMAC。// 如果計算出的HMAC與發送來的完全一致,則證明消息是完整且真實的。return 0;
}

4. 一個常見的混淆:加密 (Encryption) vs. 哈希 (Hashing)

你可能還會想問:“那我可以用它來加密密碼嗎?” 答案是:不能,而且這是兩個截然不同的概念

  • 哈希 (Hashing with QCryptographicHash)

    • 單向的:無法從哈希值還原出原始數據。
    • 目的:驗證完整性、生成指紋。
    • 例如:SHA256, MD5。
  • 加密 (Encryption)

    • 雙向的:使用密鑰將明文變為密文,也可以使用密鑰(或配對密鑰)將密文還原為明文。
    • 目的:保密性,防止信息被未授權者讀取。
    • 例如:AES, RSA。

對于密碼存儲,正確的做法是使用密碼學哈希函數,但必須是專門為密碼設計的(如 bcrypt, PBKDF2),而不是 QCryptographicHash 這種通用哈希。Qt 中可以使用 QPasswordDigestor(詳見我上一個回答)。

總結

| 你的需求 | 應該使用的 Qt 類 | 說明 |
| :— | :— | :— |
| 計算數據的哈希值(校驗文件完整性) | QCryptographicHash | 無密鑰,通用哈希計算。 |
| 計算帶密鑰的哈希(API簽名,消息認證) | QMessageAuthenticationCode (HMAC) | 需要密鑰,用于驗證真實性和完整性。 |
| 加密/解密數據(保證數據機密性) | 需要使用加密庫(如 Qt 的 QSslSocket 相關功能或第三方庫) | 需要密鑰,雙向過程。 |
| 安全地存儲用戶密碼 | QPasswordDigestor (Qt >= 5.12) | 使用慢哈希算法(如 PBKDF2),內含鹽值和迭代次數。 |

結論:
QCryptographicHash 沒有設置密鑰的功能。 如果你需要用到密鑰,你的真實需求很可能是:

  1. 消息認證 -> 使用 QMessageAuthenticationCode (HMAC)。
  2. 加密數據 -> 使用加密庫(如 AES)。
  3. 哈希密碼 -> 使用 QPasswordDigestor

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/97422.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/97422.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/97422.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

2025板材十大品牌客觀評估報告—客觀分析(三方驗證權威數據)

隨著消費者環保意識提升&#xff0c;板材作為家裝基礎材料的性能指標受到廣泛關注。中國林產工業協會數據顯示&#xff0c;2025年國內環保板材市場規模約860億元&#xff0c;但行業標準執行不一&#xff0c;消費者面臨信息不對稱問題。本報告嚴格依據可驗證的第三方數據&#x…

診斷通信管理(Diagnostic Communication Management)詳解

—— 基于《Specification of Diagnostics AUTOSAR AP R24-11》(SWS_Diagnostics.pdf) 診斷通信管理(Diagnostic Communication Management)是 AUTOSAR 自適應平臺診斷管理(Diagnostic Management,DM)的核心功能模塊之一,位于應用層,承擔 “診斷客戶端與診斷服務器實…

vue拖動排序,vue使用 HTML5 的draggable拖放 API實現內容拖并排序,并更新數組數據

vue拖動排序&#xff0c;vue使用 HTML5 的draggable拖放 API實現內容拖并排序&#xff0c;并更新數組數據 vue使用 HTML5 的draggable拖放 API實現內容拖并排序&#xff0c;并更新數組數據 實現效果實現代碼1.模板部分2. 添加拖拽相關方法3. 在 data 中添加拖拽狀態變量4. 添加…

行內元素塊元素

<!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>顯示例子</title><style>/* 將行內元素…

算法---動態規劃(持續更新學習)

1.動態規劃的經典問題 &#xff08;1&#xff09;動規基礎&#xff1a;爬樓梯、斐波那契數列 &#xff08;2&#xff09;背包問題&#xff1a;0-1背包&#xff0c;多重背包 &#xff08;3&#xff09;打家劫舍 &#xff08;4&#xff09;股票問題 &#xff08;5&#xff09;子序…

迅睿CMS自定義網站表單:HTML方式調用Select下拉選項數據指南

在迅睿CMS中&#xff0c;當我們需要自定義網站表單并希望以HTML方式調用select下拉選項數據時&#xff08;而非使用系統默認的{$myfield}、{$diyfield}或{$sysfield}模板變量&#xff09;&#xff0c;可以采用以下方法實現。 問題背景 默認情況下&#xff0c;迅睿CMS表單字段通…

k8s--efk日志收集

目錄 環境準備 下載efk軟件包 下載 nfs 設置nfs開機自啟 創建共享存儲目錄 配置共享目錄文件 加載nfs 使共享目錄生效 查看 node節點驗證 共享目錄配置成功 進入efk配置文件目錄 修改deployment.yaml文件 修改為master主節點ip 修改為nfs共享存儲目錄 修改 kibana …

數值分析——算法的穩定性

由于計算時&#xff0c;誤差會有累積&#xff0c;如果是長時間的計算&#xff0c;就會影響最后得到的結果&#xff0c;因此&#xff0c;需要分析一下誤差的影響能否控制&#xff0c;由此就引出了算法的穩定性 數值的穩定性 對于某一種算法&#xff0c;如果初始值有很小的誤差&a…

解密 Kotlin 中的隱藏調度器:Dispatchers.Main.immediate

在日常的 Android 開發中&#xff0c;我們經常使用協程來處理異步任務。你可能已經熟悉了 Dispatchers.Main、Dispatchers.IO 和 Dispatchers.Default&#xff0c;但今天我要介紹一個不太為人知卻極其有用的調度器&#xff1a;Dispatchers.Main.immediate。 一個令人困惑的現象…

I2C多點觸控驅動開發詳解

I2C多點觸控驅動開發詳解 1. 多點觸控技術概述 1.1 觸控技術發展歷程 觸控技術作為人機交互的重要方式&#xff0c;經歷了從單點觸控到多點觸控的演進過程。早期的電阻式觸控屏只能實現單點觸控&#xff0c;限制了用戶體驗。隨著電容式觸控技術的發展&#xff0c;多點觸控成為可…

UE5提升分辨率和幀率的方法

提問&#xff1a;分辨率大概理解就是是否模糊&#xff0c;幀率大概理解就是是否卡頓對嗎 回答 沒錯&#xff0c;一句話總結&#xff1a; 分辨率主要影響“看起來糊不糊”&#xff1b; 幀率與幀時間穩定性主要影響“順不順”。 如何快速提升UE5的分辨率&#xff1f; 是的&…

小狼毫輸入法中讓數字鍵盤上的數字鍵不再選擇候選詞而是與原始輸入一起直接上屏

使用搜狗輸入法的雙拼時&#xff0c;輸入“womf”然后按下主鍵盤上的數字1&#xff0c;會選擇排名第一的候選詞上屏&#xff08;大概率是“我們&#xff09;&#xff0c;輸入“womf”然后按下數字鍵盤上的數字1&#xff0c;不會選擇候選詞&#xff0c;而是將輸入文本變成“womf…

【C++】類和對象(終章)

作者主頁&#xff1a;lightqjx 本文專欄&#xff1a;C 目錄 一、構造函數 1. 構造函數體賦值 2. 初始化列表 &#xff08;1&#xff09;基本概念 &#xff08;2&#xff09;使用特性 3. explicit關鍵字 二、static成員 1. 概念 2. 特性 3. 應用 三、友元 1. 友元函…

水果目標檢測[2]:ALAD-YOLO:一種輕便、精確的蘋果葉病檢測儀

原文&#xff1a; 目錄 摘要&#xff1a; ALAD-YOLO的改進&#xff1a; 1.輕量化主干網絡&#xff1a; 2.改進的 Neck 網絡&#xff1a; 3.改進的 SPP 模塊&#xff1a; 4.注意力機制引入&#xff1a; 實驗結果 數據&#xff1a; 1 數據采集 (Data Collection) 2 數…

Let‘s Encrypt證書自動續期

證書失效后瀏覽器可以看到錯誤提示&#xff0c;以及證書過期時間。 排查服務器證書續期配置 1. 證書未正確安裝或配置 確保在阿里云服務器上部署的 Let’s Encrypt 證書已經正確安裝。你可以通過以下步驟確認&#xff1a; 使用命令 sudo certbot certificates 檢查證書是否正確…

Redis-基數統計、位圖、位域、流

Redis-基數統計、位圖、位域、流一、基數統計 HyperLogLog二、位圖 Bitmap三、位域 Bitfild四、流 Stream一、基數統計 HyperLogLog 基數統計:是用來做基數(不重復的數)統計的算法 &#xff08;統計不重復出現的數據的個數&#xff09; 基數統計VS集合 集合&#xff1a; uv …

IBMS-建筑內分散的子系統(如 BA、安防、消防、能源、電梯等)進行數據互聯、功能協同與智能管控

IBMS&#xff08;Integrated Building Management System&#xff0c;樓宇集成管理系統&#xff09;并非簡單的 “系統疊加”&#xff0c;而是通過對建筑內分散的子系統&#xff08;如 BA、安防、消防、能源、電梯等&#xff09;進行數據互聯、功能協同與智能管控&#xff0c;實…

LabVIEW溫采監控系統

?溫度采集監控系統以LabVIEW 軟件平臺&#xff0c;構建起一套高效、可靠的溫度監測與控制體系。系統可實時采集、顯示、存儲溫度數據&#xff0c;超限時自動報警并執行溫控操作&#xff0c;適用于多類場景&#xff0c;能滿足精準溫控需求&#xff0c;解決傳統系統靈活性差、成…

Docker核心概念與鏡像倉庫操作指南

文章目錄一、名詞概念Docker鏡像Docker鏡像倉庫二、Docker鏡像倉庫常用命令三、容器啟動相關指令Nginxdocker rundocker ps四、綜合實例1.搭建Nginx服務2.Docker hub上創建私有倉庫一、名詞概念 Docker鏡像 Docker 鏡像&#xff1a;是一個只讀的模板&#xff0c;它包含了創建…

科技信息差(8.30)

&#x1f30d;DeepSeek V3.1 Base突襲上線&#xff01;擊敗Claude 4編程爆表&#xff0c;全網在蹲R2和V4&#x1f384;語音界Sora&#xff01;微軟剛開源新模型&#xff0c;一次生成90分鐘語音、3200倍壓縮率VibeVoice-1.5B開創了語音界多個重大技術突破&#xff1a;一次性可連…