MSDN C示例程序用于签名哈希和验证哈希签名不起作用。

4
我已经尝试了在MSDN上演示如何签名一个哈希值以及如何验证哈希签名的样例程序。但是当我执行程序时,会得到以下输出:
CSP context acquired.
An error occurred in running the program.
Error during CryptGetUserKey for signkey.
Error number 8009000d.
Program terminating.

8009000d是NTE_NO_KEY的数字错误代码。有人知道为什么程序会以这种方式失败吗?我在Windows 7上。


这意味着默认的 CSP 没有私钥。您是否已经验证了存储中是否有私钥?(文档 - theB
@theB 我可能没有一个。我该如何创建一个? - Matthias Boehm
1个回答

3

看起来你所获得的上下文中没有键。

如果缺少密钥,可以通过将其与另一个微软示例(有关上下文获取和密钥生成)结合使用来稍微更改此示例。 只需添加代码以生成键:

...
if (CryptGetUserKey(hProv,  AT_SIGNATURE, &hKey)) {  // if block unchanged
    printf("The signature key has been acquired. \n");
}
else if (GetLastError() == NTE_NO_KEY) {             // insert processing of missing keys 
    if (CryptGenKey(                                
        hProv,
        AT_SIGNATURE,
        0,
        &hKey)) {
        printf("Created a signature key pair.\n");
    }
    else {
        MyHandleError("Error during creation of new signature key.");
    }
}
else {                      // The original else part will handle other errors
    MyHandleError("Error during CryptGetUserKey for signkey.");
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接