BOOL CryptDestroyHash(HCRYPTHASH hHash);
引数の意味は以下の通り。
| hHash | 破棄するハッシュオブジェクトのハンドル。 |
void SignData()
{
HCRYPTPROV hProv;
HCRYPTHASH hHash;
HCRYPTKEY hKey;
BOOL bResult;
BYTE Buf[] = "今日は良い天気です";
BYTE Signature[100];
DWORD SignLen;
SignLen = 100;
/* デフォルト鍵コンテナの取得 */
CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_FULL, 0);
/* ハッシュ値の生成 */
CryptCreateHash(hProv, CALG_MD5, 0, 0, &hHash);
CryptHashData(hHash, Buf, lstrlen(Buf)+1, 0);
/* 署名生成 */
CryptSignHash(hHash, AT_SIGNATURE, NULL, 0, Signature, &SignLen);
/* 署名検証 */
CryptGetUserKey(hProv, AT_SIGNATURE, &hKey);
bResult = CryptVerifySignature(hHash, Signature, SignLen, hKey, NULL, 0);
if(bResult) printf("検証成功\n");
else printf("検証失敗\n");
/* 後処理 */
CryptDestroyKey(hKey);
CryptDestroyHash(hHash);
CryptReleaseContext(hProv, 0);
}