使用 .NET Framework 生成数字签名的方法

Ways of generating a digital signature with .NET Framework

在 .NET Framework 中使用私钥(在智能卡上,证书安装在本地证书存储中)创建数字签名的另一种方法是什么?除了这个,因为我不知道如何找出关键容器名称(似乎没有其他人这样做)?

CspParameters^ cspa = gcnew CspParameters(ProviderType, ProviderName, keyContainerName, cryptoSecurityKey, securityString);

RSACryptoServiceProvider^ csp = gcnew RSACryptoServiceProvider(cspa);

csp.SignHash()

据我了解,如果在没有 keyContainerName 的情况下初始化 CspParameters,Crypto Provider 将无法告知要使用哪个证书进行签名,因此它无法正常工作。我在网上搜索了信息并 none 找到了(除了几个未回答的问题)。我发现的唯一示例使用 "example"、"test" 等字符串作为 keyContainerName。如果一个程序将被许多拥有大量证书和智能卡的人使用,这是无用的,因为您需要一种方法来查看所选证书并确定其容器名称(如 certutils.exe ) 然后创建 CspParameters、RSACryptoServiceProvider 然后签名。所以现在这已经不是问题了。

那么在 .NET Framework 中使用智能卡生成数字签名的其他方法有哪些?

如果其他人正在寻找此问题的答案,this article 指明了方向:

简而言之,在 C++/CLI 中可以这样完成:

X509Certificate2^ certificate = //... get your certificate that has a corresponding private key

RSACryptoServiceProvider^ csp = safe_cast<RSACryptoServiceProvider^>(certificate->PrivateKey);

csp.SignHash();

但是,如果不想调用本机 CSP PIN 输入对话框,如何将密码传递给 RSACryptoServiceProvider 仍然不清楚。