Cryptoapi签名/验证无法在Windows 8.1上运行
我们有一个应用程序使用CryptoApi签署和验证带有SHA1哈希值的消息.它在
WindowsXP和
Windows 8下运行了很多年.它不再适用于Windows 8.1. CryptSignHash失败,错误代码为87(无效参数). CryptVerifySignature不会失败但会返回NTE_BAD_SIGNATURE(对于在Windows 8上创建的有效签名).我们已经测试了所有可能的东西..它适用于Windows 8及更低版本,在Windows 8.1上失败.
您对如何进一步调试有任何想法吗? 在Windows 8.1上签名是否适用于任何人.? Windows 8.1上还有其他新功能吗?这可能会阻止签名工作? 应用程序是用Delphi编写的,大致使用以下流程: //Setup crypto provider CryptAcquireContext(@fhCryptProv,nil,cptRSAFull,[ccVerify,ccMachineKeySet]); //Create a hash structure CryptCreateHash( fProvider.GetProviderHandle,chtSHA1,@fhHash); //Import the private key for signing CryptImportKey( fProvider.GetProviderHandle,@buff[0],len,CRYPT_EXPORTABLE,@fKey); //Hash the message CryptHashData(fhHash,@aPlainText[1],length(aPlainText) * 2,0); //Sign the message CryptSignHash(fhHash,AT_SIGNATURE,CRYPT_NOHASHOID OR CRYPT_X931_FORMAT,@buff,@len); 解决方法
设置CRYPT_X931_FORMAT标志时,CryptSignHash在Windows 8.1上失败.这看起来像Windows 8.1.错误.
通过从下面的URL运行MSDN示例代码,使用CALG_SHA1而不是CALG_MD5进行散列并将CryptSignHash中的标志设置为CRYPT_NOHASHOID,可以重现此错误. CRYPT_X931_FORMAT;将标志保留为0或仅保留CRYPT_NOHASHOID适用于我测试过的系统. 我从未在WindowsXP到Windows 8.0系统上使用这些标志出现任何问题. MSDN示例代码URL:http://msdn.microsoft.com/en-us/library/windows/desktop/aa382371%28v=vs.85%29.aspx (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- WiX MajorUpgrade的Windows服务,保留.config并避免重新启动
- 如何学习阅读Windows Server事件查看器并了解哪些事件是正常
- 为Windows创建R包
- windows-server-2008 – 从Windows Server 2000工作组迁移到
- windows上使用logstash-input-jdbc
- Windows Azure Powershell将文件复制到VM
- windows – 如何设计/确保Web服务器的高可用性?
- ssh – 从Windows远程访问Jupyter笔记本?
- Windows环境下,安装vue.js的方法
- windows-7 – 为什么我的登录脚本不会映射Windows 7下的驱动