The Cryptography API, or How to Keep a Secret(三)

幾個加密API函數

[編者注:下面縮進部分的文件引用自MSDN Library, Platform, SDK, DDK 文檔。]<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

初始化CSPCryptAcquireContext, CryptReleaseContext

函數CryptAcquireContext用來獲得CSP中一個特定密鈅容器的句柄。返回的句柄然後就可以對選擇的CSP進行調用。

函數CryptReleaseContext用於釋放函數CryptAcquireContext返回的句柄。 CryptReleaseContext 不會刪除任何Cryptography API 對象,它僅僅釋放對象的句柄。

函數CryptAcquireContext執行兩個操作。 首先試着查找變量中指定的CSP 如果找到,函數試着查找CSP中匹配指定密鈅容器名的密鈅容器。此函數也可以用於建立、刪除密鈅容器,這取決於函數中的參數值。

取得默認CSP中默認密鈅容器的代碼如下所示:(譯註:原文章代碼中註釋爲英文,此處譯爲中文,下面情況同)

如果CryptAcquireContext調用成功,返回值非零,變量hProv 即爲要取得的密鈅容器句柄。

要在默認CSP中添加或者創建一個密鈅容器,要寫的代碼如下:

如果CryptAcquireContext調用成功,返回值非零,變量hProv 即爲新的密鈅容器句柄。

要從默認CSP中刪除一個存在的密鈅容器,要寫的代碼如下:

如果CryptAcquireContext調用成功,返回值非零,變量hProv 指向的密鈅容器已經刪除,此密鈅容器不再有效。

散列數據:CryptCreateHash, CryptHashData, CryptGetHashParam, CryptDestroyHash

當我說“散列法”或“散列”("hashing" or "hash" )時,是指從一塊數據中派生出一個數值的方法或算法。這可能是簡單的將所有數據位相加,或複雜到要對數據進行傅立葉變換。(譯註:散列也被稱爲哈希,雜湊)

上面列出的四個函數是用於創建或者維護從提供的數據生成的散列值的,一般一起使用:

  • 函數 CryptCreateHash用於散列數據時初始化。它返回CSP散列對象的句柄,此句柄會在後續CryptHashData函數散列數據時使用。
  • 下一步是調用CryptGetHashParam 函數取得散列值。
  • 函數 CryptDestroyHash 釋放函數 CryptCreateHash返回的句柄。CryptDestroyHash不會刪除任何加密 API 對象,它僅僅釋放散列對象的句柄。

CryptHashData 函數用來從提供的數據中計算密碼散列。爲計算一個大數據塊或者數據塊的幾個部分時,此函數可被調用多次。例如,我們要對緩衝區pBufferdwBufferLen字節長的數據進行散列。在此例子中我僅使用CALG_MD5 散列算法來實現此目的。 加密 API SDK 文檔中還提供對許多其它算法詳細的描述。 本例子假定只散列一塊數據。一旦調用CryptGetHashParam函數取得了散列值,此散列實例對象便不能再散列其它數據了。

上面例子爲pBuffer 指向的數據生成一個散列值。如果還要散列其它數據,用這個數據調用 CryptHashData,產生的散列值仍會是原來的值。已警告過使用HP_HASHVALUE參數調用 CryptGetHashParam 會阻止使用此對象繼續進行散列。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章