CryptHashData ハッシュオブジェクトへのデータの追加

Cの宣言:

BOOL CryptHashData(
	HCRYPTHASH hHash,
	BYTE *Buf,
	DWORD BufLen,
	DWORD Flags);

説明:

ハッシュオブジェクトに、ハッシュ値を求める元となるデータを追加する。

hHash 追加先のハッシュオブジェクトのハンドル。
Buf 追加するデータ。
BufLen 追加するデータのデータ長。
Flags 後述の表を参照。

Flagsには、以下の値を指定可能。
CRYPT_USERDATA ダイアログボックスを表示するなどによりユーザに直接データを入力させる。このフラグを設定した場合、BufLenは0でなければならない。(Microsoft RSA Base Providerはこのフラグをサポートしていない)

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 更新)

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