RC4による暗号化(C言語)

説明:

コード中のPasswordで指定したパスワードによりRC4鍵(ストリーム)を生成し、これによってBufで指定されている平文を暗号化する。また、同じ鍵を用いて暗号文を復号化する。

キーワード:

CryptAcquireContext, CryptCreateHash, CryptHashData, CryptDeriveKey, CryptEncrypt, CryptDecrypt, CryptDestroyKey, CryptDestroyHash, CryptReleaseContext

サンプルコード:

void EncryptData()
{
	HCRYPTPROV hProv;
	char *Password = "HogeHoge";
	HCRYPTHASH hPwdHash;
	HCRYPTKEY hKey;
	BYTE Buf[100] = "本日は晴天なり";
	DWORD DataLen;
	DWORD i;

	DataLen = lstrlen(Buf)+1;

	/* デフォルト鍵コンテナの取得 */
	CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_FULL, 0);

	/* パスワードのハッシュオブジェクト生成 */
	CryptCreateHash(hProv, CALG_MD5, 0, 0, &hPwdHash);
	CryptHashData(hPwdHash, Password, lstrlen(Password)+1, 0);

	/* 鍵生成 */
	CryptDeriveKey(hProv, CALG_RC4, hPwdHash, 0, &hKey);

	/* 平文の表示 */
	printf("平文: ");
	for(i=0; i<DataLen; i++) printf("%02x ", Buf[i]);
	printf("\n");	

	/* 暗号化 */
	CryptEncrypt(hKey, 0, TRUE, 0, Buf, &DataLen, 100);

	/* 暗号文の表示 */
	printf("暗号文: ");
	for(i=0; i<DataLen; i++) printf("%02x ", Buf[i]);
	printf("\n");	

	/* 復号化 */
	CryptDecrypt(hKey, 0, TRUE, 0, Buf, &DataLen);

	/* 復号結果の表示 */
	printf("復号結果: ");
	for(i=0; i<DataLen; i++) printf("%02x ", Buf[i]);
	printf("\n");	

	/* 後処理 */
	CryptDestroyKey(hKey);
	CryptDestroyHash(hPwdHash);
	CryptReleaseContext(hProv, 0);
}
(original text:1998/12/28 更新)

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