美好的一天。Stackoverflow之前已经帮过我很多次了,但是我有点卡在这上面,希望有人能给我一些指点。背景:我需要将证书的X509数据传递给Adobe的SDKCertListCab,以便使用我的Acrobat插件API签署PDF。我的问题是如何使用CryptoAPI从PFX证书中获取X509数据?我做了以下事情:将我的PFX证书转换为内存存储。CRYPT_DATA_BLOB数据;打开文件并填充数据。FILE*fIn=fopen("C:\\certificate\\MyPfx.pfx","rb")fseek(fIn,0,SEEK_END);data.cbData=ftell(f
我尝试在Windows7上使用SHA2-512和CryptoAPI,但是,调用CryptCreateHash失败,GetLastError()=2148073480=0x80090008,即“无效算法”指定的”。根据https://msdn.microsoft.com/en-us/library/windows/desktop/aa375549%28v=vs.85%29.aspxSHA2应该从WindowsXPSP3开始可用。这是我使用的代码:HCRYPTPROVhCryptProv;CryptAcquireContext(&hCryptProv,nullptr,nullptr,PRO
我正在尝试了解如何在XP、Vista和Windows7中获取从PEM格式(示例包含在下面的代码中)导入的公钥。示例代码将在XP和WindowsVista/7上导入key,但方式不同。在WindowsXP上,密码提供者的名称中需要字符串"(Prototype)",并允许对CryptImportPublicKeyInfo的调用通过。在Windows7上,"(Prototype)"提供程序显然存在,但不支持对CryptImportPublicKeyInfo的调用,这令人困惑。这些操作系统之间的正确实现是什么样的?是否有必要检测XP并请求带有"(Prototype)"的名称,而没有它用于其他操
我正在尝试使用WinCryptAPI在C++中。我的应用程序需要对文件进行加密、解密、签名和验证,一旦我拥有正确的key,我就知道该怎么做。但我的问题实际上是生成这些key的应用程序不是同一个应用程序。我拥有的是PEM格式文件中的公钥和私钥:-----BEGINRSAPRIVATEKEY-----[Base64encoded]-----ENDRSAPRIVATEKEY-----和:-----BEGINRSAPUBLICKEY-----[Base64encoded]-----ENDRSAPUBLICKEY-----经过一些研究,我找到了如何导入公钥:here和here,使用以下方法:Cr
我目前正在使用CertGetNameString像这样提取每个主题属性的值:CertGetNameString(pCertificate,CERT_NAME_ATTR_TYPE,0,szOID_ORGANIZATIONAL_UNIT_NAME,buf,_countof(buf));但是,我发现一些证书的组织单位名称(OU)有多个值,CertGetNameString只能读取第一个值。例如,这是Adobe证书的主题:CN=AdobeSystems,IncorporatedOU=AcrobatEngineeringOU=DigitalIDClass3-MicrosoftSoftware
我正在使用Python和OpenSSL连接到一个使用TLS的站点(在某些跨平台软件中,因此切换到CryptoAPI的所有工作量太大);不过,我不想分发(和更新)自定义证书列表。我想从平台上获取它们。在OSX和Linux上,这相当简单,但Windows附带了一份不完整的TLS受信任根证书颁发机构列表;基本上只是微软自己的证书,然后当高级TLS内容(例如通过HTTPS在InternetExplorer中加载网页)必须验证它以前没有见过的信任根时,动态地将信任根添加到商店。(Thisprocessisexplainedhere.)这意味着我可以enumeratetheWindowsrootc
在LinuxCRYPTO库中,有什么区别:crypto_alloc_hash(...);crypto_alloc_ahash(...);crypto_alloc_shash(...);我猜“a”代表异步,“s”代表同步。如果是这种情况,在实现选择方面意味着什么?(我正在尝试找到在使用CRYPTO库处理TCP数据包时计算HMAC(SHA1)值的正确方法)。 最佳答案 SOQuestion1&SOQuestion2对你来说是很好的起点。没有所谓的异步函数和同步函数。所有函数(被调用者)都需要返回给调用者。但是有异步和同步操作。crypt
在C:\ProgramFiles\MicrosoftSDKs\Windows\v7.0A\Include\WinCrypt.h中,CERT_CHAIN_ENGINE_CONFIG的定义是typedefstruct_CERT_CHAIN_ENGINE_CONFIG{DWORDcbSize;HCERTSTOREhRestrictedRoot;HCERTSTOREhRestrictedTrust;HCERTSTOREhRestrictedOther;DWORDcAdditionalStore;HCERTSTORE*rghAdditionalStore;DWORDdwFlags;DWORDdw
我们有一个应用程序可以使用CryptoApi使用SHA1哈希对消息进行签名和验证。它在WindowsXP到Windows8下已经完美运行了很多年。它不再适用于Windows8.1。CryptSignHash失败,错误代码为87(无效参数)。CryptVerifySignature不会失败但会返回NTE_BAD_SIGNATURE(对于在Windows8上创建的有效签名)。我们已经测试了我们所能做的一切......它适用于Windows8及更低版本,但在Windows8.1上失败。您对如何进一步调试有任何想法吗?我们再次导出导入的公私钥,验证无误。我们跳过了使用“我们的”key并生成了新
我是一名C++开发人员,但在Windows开发方面没有深厚的背景。我的主要问题围绕着CryptoAPI的使用展开.我将使用类似CryptAcquireContext的函数.在对该API进行更多研究时,仅将其描述为“Win32CryptoAPI”。不知是否有“Win64CryptoAPI”?如果不是,如果我在VisualStudio中开发一个使用“Win32CryptoAPI”的应用程序并编译为64位模式。如果我用32位编译会更好吗?要开发使用CryptoAPI的64位应用程序,我需要做什么?如果可能,请报告您在使用加密API、检索证书、携带签名等开发64位应用程序时遇到的任何问题。文章