CryptGetUserKey( HCRYPTPROV hProvider, DWORD KeyType, HCRYPTKEY *hKey);
引数の意味は、以下の通り。
hProvider | CSPを識別するハンドル。 |
KeyType | 取得する鍵のタイプを指定するフラグ。後述の表を参照。 |
hKey | 取得結果の鍵ペアのハンドル。 |
KeyTypeに指定可能な値は以下のいずれかである。
AT_KEYEXCHANGE | 鍵交換用鍵。 |
AT_SIGNATURE | 署名用鍵。 |
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); }