**Cryptographic API** (CryptoAPI) 是微軟在 Windows 作業系統中添加的密碼編譯機能，作為資料加密與解密功能的重要基礎，CryptoAPI 支援同步，非同步的金鑰加密處理，以及作業系統中的數位憑證 的管理工作。从Windows NT 4.0引入此功能，并在以后版本的操作系统中不断增强。

目前的 CryptoAPI 支援下列工作：

* 基礎密碼學函數。
	+ 內文函數 (Context function)。
	+ 金鑰產生函數 (Key generation function)。
	+ 金鑰交換函數 (Key Exchange function)。
* 憑證編碼與解碼函數（支援雜湊功能）。
* 憑證儲存函數。
* 簡單訊息函數。
	+ 加密與解密訊息與資料。
	+ 對訊息與資料進行簽章。
	+ 對收到的訊息與相關資料進行數位簽章驗證的檢查。
* 低階訊息函數。

由於 CryptoAPI 使用上過於複雜，因此微軟另外為 CryptoAPI 開發更為容易使用的 CAPICOM 元件，以及 Data Protection API。从Windows Vista开始，推出了新一代密码学API Cryptography API: Next Generation。

例子
--

```
#include <wincrypt.h>
#include <wintrust.h>
#pragma comment(lib, "crypt32.lib")

#include <atlstr.h>
bool GetHash(int hash\_type, CString& hash\_result, CString& hash\_message)
{

 HCRYPTPROV hCryptProv;
 HCRYPTHASH hCryptHash;

 /\*Note that you will get the error such as ‘Invalid Algorithm Specified’ (Error Code: 0x80090008) when you try to replace the algorithm with CALG\_SHA256, CALG\_SHA384 or CALG\_SHA512. Because these algorithms are not supported by Microsoft Base Cryptography Provider ( PROV\_RSA\_FULL ). To fix this problem you need to use the provider as PROV\_RSA\_AES (Microsoft Enhanced RSA and AES Cryptographic Provider) in the CryptAcquireContext function instead of PROV\_RSA\_FULL.\*/
 if (!CryptAcquireContext(&hCryptProv, NULL, MS\_ENH\_RSA\_AES\_PROV, PROV\_RSA\_AES, 0))
 //&hCryptProv, NULL, MS\_DEF\_PROV, PROV\_RSA\_FULL, CRYPT\_VERIFYCONTEXT))
 {
 unsigned int e = GetLastError();
 CString str;
 str.Format("创建CSP容器出错！错误代码为:%x！", e);
 MessageBox(NULL, str, "出错啦!", MB\_OK | MB\_ICONERROR);
 return false;
 }

 if (!CryptCreateHash(hCryptProv, hash\_type, 0, 0, &hCryptHash))
 {
 DWORD e = GetLastError();
 CString str;
 str.Format("创建哈希句柄出错！错误代码为:%x！", e);
 MessageBox(NULL, str, "出错啦!", MB\_OK | MB\_ICONERROR);
 return false;
 }

 if (!CryptHashData(hCryptHash, (BYTE\*)hash\_message.GetBuffer(), hash\_message.GetLength(), 0))
 {
 int e = GetLastError();
 CString str;
 str.Format("计算哈希值出错！错误代码为:%d！", e);
 MessageBox(NULL, str, "出错啦!", MB\_OK | MB\_ICONERROR);
 return false;
 }

 char hash\_data[512];
 DWORD hash\_len = 512;
 if (!CryptGetHashParam(hCryptHash, HP\_HASHVAL, (BYTE\*)hash\_data, &hash\_len, 0))
 {
 int e = GetLastError();
 CString str;
 str.Format("获取哈希值出错！错误代码为:%d！", e);
 MessageBox(NULL, str, "出错啦!", MB\_OK | MB\_ICONERROR);
 return false;
 }

 char hash\_hex[512];
 for (unsigned int i = 0; i <= hash\_len - 1; i++)
 {
 int hash\_bit = hash\_data[i];
 int first = (hash\_bit & 0xf0) >> 4;
 int second = hash\_bit & 0x0f;
 char tmp[2];
 \_itoa(first, tmp, 16);
 hash\_hex[i \* 2] = tmp[0];
 \_itoa(second, tmp, 16);
 hash\_hex[i \* 2 + 1] = tmp[0];
 }

 hash\_hex[hash\_len \* 2] = '\0';
 hash\_result.Format("%s", hash\_hex);
 CryptDestroyHash(hCryptHash);
 CryptReleaseContext(hCryptProv, NULL);
 return true;
}

```

參考資料
----

1. ↑ .  [2008-09-01]. （原始内容存档于2008-11-08）.
2. ↑ .  [2008-09-01]. （原始内容存档于2008-10-26）.


|  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| 

| * 
* 论
* 编
微軟應用開發介面與框架 |
| --- |
|  |
| 圖形介面 | 
* 
* DirectX
* Direct2D
* Direct3D
* D3DX
* GDI / GDI+
* WPF
* Silverlight
* WinRT XAML（英语：）
* Windows色彩系统
* Windows Image Acquisition（英语：）
* Windows Imaging Component（英语：）
* DXGI
* Windows高级光栅化平台（WARP）
* WinG标准

 |
|  |
| 音樂與音效 | 
* DirectMusic
* DirectSound
* DirectX（英语：）
* 跨平台音频创作工具（XACT）
* Speech API（英语：）
* XAudio2（英语：）

 |
|  |
| 多媒體 | 
* DirectX
	+ Media Objects
	+ DXVA
* Xinput
* DirectInput
* DirectShow
* Image Mastering API
* Managed DirectX（英语：）
* Media Foundation
* XNA
* Windows Media
* Video for Windows

 |
|  |
| Web | 
* MSHTML
* RSS平台（英语：）
* JScript
* VBScript
* 瀏覽器協助工具物件
* XMLHTTP
* SideBar小工具
* TypeScript

 |
|  |
| 資料存取 | 
* 資料存取元件集
	+ ADO
	+ ADO.NET
		- Entity Framework
	+ ODBC
	+ OLE DB
* 可扩展存储引擎
* WCF Data Services
* 同步框架（英语：）
* Jet資料庫引擎
* 微軟XML剖析器
* OPC

 |
|  |
| 網路 | 
* Winsock
	+ LSP
* Winsock内核（英语：）
* Windows筛选平台
* 網路驅動程式介面規格（NDIS）
* Windows Rally
* 后台智能传输服务（BITS）
* 對等通訊API（英语：）
* MSMQ（英语：）
* MS MPI（英语：）
* DirectPlay
* Active Directory Service Interface

 |
|  |
| 通訊 | 
* 訊息API（英语：）
* 電話API
* WCF

 |
|  |
| 管理 | 
* Win32控制台
* Windows Script Host
* WMI
* PowerShell
* 工作排程器
* Offline Files（英语：）
* 磁碟區陰影複製服務
* Windows Installer
* Windows錯誤回報（英语：）
* 事件記錄器
* 通用日志文件系统

 |
|  |
| 元件與模型 | 
* COM
* COM+
* ActiveX
* DCOM
* .NET框架

 |
|  |
| 函式庫 | 
* 框架类库
* MFC
* 活动模板库（ATL）
* WTL

 |
|  |
| 驱动程序 | 
* WDM
* WDF
	+ KMDF
	+ UMDF
* WDDM
* NDIS
* UAA
* BDA（英语：）
* VxD

 |
|  |
| 安全性 | 
* Crypto API
	+ CAPICOM
* Windows CardSpace
* 数据保护API
* 安全支持提供者接口（SSPI）

 |
|  |
| .NET | 
* ASP.NET
* ASP.NET AJAX
* ADO.NET
* Remoting
* Silverlight
* 任务并行库（英语：）（TPL）
* WCF
* Windows CardSpace
* WPF
* WF
* Core家族
	+ .NET Core
	+ ASP.NET Core
	+ Entity Framework Core
	+ ASP.NET Core MVC

 |
|  |
| 工廠 | 
* EFx Factory（英语：）
* Enterprise Library（英语：）
* 複合使用者介面（英语：）
* CCF（英语：）
* CSF（英语：）

 |
|  |
| 行程間通訊 | 
* MSRPC（英语：）
* 動態資料交換（DDE）
* Remoting
* WCF

 |
|  |
| 可協助性 | 
* Active Accessibility（英语：）
* 使用者介面自動化（英语：）

 |
|  |
| 文字與多語系支援 | 
* DirectWrite
* 文本服务框架（英语：）
* 文本对象模型（英语：）
* 输入法编辑器
* 語言介面套件（英语：）
* 多語系使用者介面（英语：）
* Uniscribe

 |
|  |
| 遊戲開發 | 
* Direct3D
* D3DX
* DirectSound
* DirectInput
* DirectPlay
* DirectMusic
* Managed DirectX（英语：）
* XNA

 |

 |