内容hash,签名 (Windows Crypt API)

本文介绍了如何利用Windows Crypto API进行哈希计算和签名操作。通过CryptAcquireContext、CryptGetUserKey、CryptExportKey、CryptCreateHash、CryptHashData和CryptSignHash等函数,详细阐述了从获取密钥容器到计算哈希值并签名的过程。内容包括创建和获取密钥容器、导出公钥、计算MD5哈希以及对哈希值进行签名。最后讨论了接收方验证签名的方法,强调了证书验证的重要性。
摘要由CSDN通过智能技术生成

Windows 提供了Crypto API, 使用这些API, 我们可以比较轻松的实现Hash,签名等工作。MSDN上有很多信息,

http://technet.microsoft.com/zh-cn/library/aa382371

下面的例子是对一个给定的字符串进行hash计算,并且把hash值签名。给定的字符串如下:

BYTE *pbBuffer = (BYTE *)"The data that is to be hashed and signed.";

CryptAcquireContext

第一个需要使用的API 是CryptAcquireContext。

原型如下:

BOOL WINAPI CryptAcquireContext(
  _Out_  HCRYPTPROV *phProv,
  _In_   LPCTSTR pszContainer,
  _In_   LPCTSTR pszProvider,
  _In_   DWORD dwProvType,
  _In_   DWORD dwFlags
);

pszContainter是一个字符串,可以指定key container的名字。

pszProvider指定CSP,如果传NULL的话,那就是default CSP.

dwProvType指定类型

更多信息查看MSDN。

CryptAcquireContext会首先查找指定的CSP,然后再查找指定的key container。如果成功的话,就返回一个CSP的handle(第一个参数)。

下面代码是一个简单的例子。当程序第一次执行的时候,第一个CryptAcquireContext会失败,因为"MyContainer" 密钥容器根本不存在,这样我们就可以创建一个。一旦创建好了,以后就可以直接获取了。

//-------------------------------------------------------------------
    // Acquire a cryptographic provider context handle.

    if (CryptAcquireContext(
        &hProv,
        L"MyContainer",
        NULL,
        PROV_RSA_FULL,
        0))
    {
        printf("CSP context acquired.\n");
    }
    else
    {
        if (GetLastError() == NTE_BA
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值