2014-09-26 49 views
1

我们正在使用存储在USB令牌上的 证书在未受管理的C++项目中使用microsoft wincrypt实现数字签名。每次需要密码CryptSignMessage()调用

除非我们的应用程序已关闭并重新启动,否则一切都按预期工作,除非用户多次执行此过程,他们只需要首次输入其证书密码。

我们需要用户在每次签名时输入密码。有没有办法“重置”这个过程?

CertOpenSystemStore(NULL,"MY"); 
CertEnumCertificatesInStore(); // until we find the certificate we want 
CryptSignMessage(); // this brings up the password dialog box the first time, but not again 
// edited to show closing store and freeing context 
CertCloseStore(); 
CertFreeCertificateContext(); 

谢谢!

回答

1

缓存密码由USB设备的驱动程序控制。通常这可以通过设备及其驱动程序附带的一些UI应用程序进行配置。

作为最后的手段,您可以将签名过程放到单独的EXE中,并在您每次需要签名数据时运行它。这样,每个签名操作都会调用单独的进程,并且密码不会被缓存。

+0

谢谢,我不在办公室,直到星期一,但会检查这一点。 – PhilC 2014-09-26 19:16:33

相关问题