CryptGetUserKey 鍵ペアの取得

Cの宣言:

CryptGetUserKey(
	HCRYPTPROV hProvider,
	DWORD KeyType,
	HCRYPTKEY *hKey);

説明:

hProviderで指定したCSPからKeyTypeで指定したタイプの鍵を取得し、そのハンドルをhKeyに返す。

引数の意味は、以下の通り。
hProvider CSPを識別するハンドル。
KeyType 取得する鍵のタイプを指定するフラグ。後述の表を参照。
hKey 取得結果の鍵ペアのハンドル。

KeyTypeに指定可能な値は以下のいずれかである。
AT_KEYEXCHANGE 鍵交換用鍵。
AT_SIGNATURE 署名用鍵。

Cのサンプル:

デフォルト鍵コンテナにより、コード中のBufで指定されているデータに対してハッシュアルゴリズムMD5で電子署名を生成する。また生成した署名の検証を行う。
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);
}
(original text:1998/12/28 更新)

本ドキュメントの内容は保証しません。本ドキュメントによって生じた結果について、一切の責任を負いません。