我正在为我的应用程序使用 Gemalto IDPrime .NET 智能卡。以下方法加密一些字节并显示签名:
private static void SimpleDataEncryption()
{
var csp = new CspParameters(1, "Microsoft Base Smart Card Crypto Provider")
{
Flags = CspProviderFlags.UseDefaultKeyContainer
};
var rsa = new RSACryptoServiceProvider(csp);
var data = new byte[] { 0, 1, 2, 3, 4, 5, 6, 7 };
Console.WriteLine("Data : " + BitConverter.ToString(data));
var sig = rsa.SignData(data, "SHA1");
Console.WriteLine("Signature : " + BitConverter.ToString(sig));
var verified = rsa.VerifyData(data, "SHA1", sig);
Console.WriteLine("Verified : " + verified);
}
到目前为止,这种方法完美无缺。
我的问题是每次启动应用程序时,Windows 都会提示用户重新输入 PIN。智能卡架构的文档说明了以下内容:
Base CSP 在内部维护每个进程的 PIN 缓存。PIN 被加密并存储在内存中。
我找到了一种使用 以编程方式设置智能卡 PIN 的advapi32.dll
方法,但这种方法对我来说似乎很不自然,因为 PIN 必须以明文形式传递。
所以我的问题是:
.NET 是否支持在用户第一次正确输入智能卡时缓存智能卡的 PIN 并每次使用它,直到用户更改 PIN?