在網路傳輸中,如何確保資料未被竄改?數位簽名提供了解決方案。本文詳細解析數位簽名工作原理,並提供基於 C++ Builder 使用 Windows CryptoAPI (CAPI) 實現檔案簽名與驗證的完整程式碼範例。
數位簽名流程包含三步:
程式碼展示兩大核心流程:
CryptAcquireContext(&hProv, ...) // 取得 CSP 控制代碼
CryptCreateHash(hProv, CALG_MD5, ...) // 建立雜湊物件
CryptHashData(hHash, buffer, ...) // 逐塊輸入檔案資料計算雜湊
CryptSignHash(hHash, AT_SIGNATURE, ...) // 私鑰簽名雜湊值
CryptGetUserKey(hProv, AT_SIGNATURE, &hPublicKey) // 取得公鑰
CryptCreateHash + CryptHashData // 重新計算雜湊
CryptVerifySignature(hHash, pSignature, ...) // 公鑰驗證
BUFFER=4096 平衡 I/O 效率與記憶體佔用pSignature[256] 足夠容納 RSA-1024 簽名TFileStream 讀取檔案,配合 do-while 迴圈分塊處理大檔案CALG_SHA_256 或更強NTE_BAD_SIGNATURE:資料已被修改或公鑰不匹配CRYPT_E_NOT_FOUND:找不到對應的金鑰容器本範例為教學用途簡化實現,生產環境需補全錯誤碼對應訊息、日誌記錄、例外處理等工程化細節。