问题标签 [mscapi]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
windows - 使用 MS CryptoAPI 保存/恢复证书会使附加的私钥无效
我编写了一个程序,该程序应该使用 windows Crypto API 保存和恢复用户证书。我的印象是它工作正常,但现在用户抱怨证书恢复后附加到证书的私钥无效。
我正在使用以下方法保存证书:
然后后来:
我知道 CERT_STORE_SAVE_AS_STORE 标志应该意味着整个证书应该被序列化,包括私钥。虽然我注意到 MSDN 说:
“CERT_KEY_CONTEXT_PROP_ID 属性和相关的 CERT_KEY_PROV_HANDLE_PROP_ID 和 CERT_KEY_SPEC_PROP_ID 值不会保存到序列化存储中。”
..我承认,我不太明白。
当我恢复证书时,我使用 CertFindCertificateInStore() 来查看证书是否已经存在,并且只有当它不存在时才这样做:
重新添加证书......所以我的问题是,为什么不能保留私钥?我错过了什么吗?
windows-ce - Win CE 中的文件系统过滤器和 CryptoAPI 问题
过去两周我一直在研究文件系统过滤器,我遇到了一个有趣的问题。我基本上在一个应用程序中构建了编码/解码实现,该应用程序首先在 Platform Builder 的操作系统启动上运行,以验证它是否工作并用于调试目的。这个应用程序运行良好,能够毫无问题地获取上下文、生成密钥、加密/解密。
当我尝试在 filesys dll 加载上做同样的事情时(据我所知,这是加载文件系统过滤器的点),我的文件系统过滤器似乎没有可用的 CSP 服务。CryptAcquireContext 因 NTE_BAD_KEYSET 而失败,或者当我尝试使用默认提供程序时,它因 NTE_PROV_TYPE_NOT_DEF 而失败。
沮丧的是,我编写了一些代码来枚举当时所有可用的提供程序,结果发现在加载 filesys 时没有任何提供程序,想知道是否有人有任何经验或想法可以提供帮助。我已经正式用完了想法。
干杯伯纳德
lisp - 禁用 lispworks capi:push-button-panel 上的单个按钮
我正在使用 common lisp 和LispWorks CAPI开发 Connect Four 游戏。除了一件事之外,我已经完成了界面:我使用按钮(在按钮面板中)将片段放入列中,并且我想在相应列已满时禁用按钮。我对 lisp 比较陌生,而且我特别不了解面向对象的东西,所以我不知道该怎么做。
可以这样创建一个按钮:
并因此禁用:
类似地创建一个按钮面板,除了它需要一个:items
参数,即面板中的按钮列表(或数据,CAPI 将创建按钮)。
我只需要知道如何禁用按钮面板的各个按钮。如果你能解释最后一段代码中发生的事情,那就太好了,因为我根本不明白。
谢谢!
c# - 如何通过 C# 使用 CryptoAPI?
有一组 CryptoApi 函数可与加密服务提供商 (CSP) 一起使用。
是的,我知道有 System.Cryptography 命名空间。但我不需要他们的实现。
是否有任何现成的库为这些函数提供 .NET 包装器?
openssl - 如何通过 Indy 在 openSSL 1.0.0 Win32 中动态加载 Crypto Api (capi.dll)?
我使用 Indy 10,我希望我的 http 客户端使用 Windows 商店证书。我使用 openssl 库 1.0.0d,它应该允许我加载 capi.dll,但加载总是失败。
有任何想法吗?
谢谢
c++ - 如何使用 CAPI 的 CryptImportKey 和 PEM 编码来自 OpenSSL 的公钥?
如何让 Microsoft 的 CryptoAPICryptImportKey
函数导入PEM编码密钥?它确实有效,但CryptDecrypt
返回错误。
openssl - OpenSSL 和 MS CryptoAPI:不同的数字签名
我使用 makecert 实用程序生成了带有私钥的 X509 证书
然后我使用 OpenSSL 将 RootCATest.pvk 转换为 RootCATest.pem。我提取了公钥:pubRootCATest.pem
我有一个名为“msg”的小文件。我使用 SHA1 签署了这个文件。
然后我想使用 MS CryptoAPI 获得相同的数字签名。
这是我的代码(注意:这是理解概念的代码,所以我不会释放分配的内存)
作为输出,我得到的签名与 OpenSSL 的签名完全不同。我怎样才能获得相同的签名?
我认为有一些时刻需要注意:
- 我的 msg_size 与文件大小相同。所以它是要签名的字节数。在某些站点上,我看到了将空字节添加到字节数组的建议。在这种情况下我真的需要它吗?
- 标志 CRYPT_NOHASHOID。没有它,当 OpenSSL 生成的签名为 128 字节时,我得到大小为 130 字节的签名。所以我认为 CRYPT_NOHASHOID 应该在那里。
- SwapBytes(...) 我尝试了它和没有它。在这两种情况下,我的签名都与 OpenSSL 签名完全不同。
c++ - 开发使用 MS CryptoAPI 的 64 位应用程序
我是一名 C++ 开发人员,但在 Windows 开发方面没有很强的背景。
我的主要问题围绕着Crypto API的使用。我将使用CryptAcquireContext 之类的函数。在研究有关此 API 的更多信息时,仅描述为“Win32 Crypto API”。我想知道是否有“Win64 Crypto API”?
如果没有,如果我开发了一个在 Visual Studio 中使用“Win32 Crypto API”并编译为 64 位模式的应用程序。如果我用32位编译会更好吗?
要开发一个使用 Crypto API 的 64 位应用程序,我需要做什么?
如果可能,请报告您在使用加密 API、检索证书、携带签名等时开发 64 位应用程序时遇到的任何问题。
文章非常受欢迎。
c++ - MS CryptoAPI 在 Windows XP 上无法使用 CryptAcquireContext()
我使用 Microsoft CryptoAPI 编写了一些代码来计算 SHA-1,并让编译后的 exe 在 Windows 7、Win Server 2008、Win Server 2003 上运行。但是,当我在 Windows XP SP3 下运行它时,它不起作用。
我将失败的范围缩小到CryptAcquireContext()
通话。
我确实注意到之前的一篇文章谈到了“ ……(原型) ”的 XP 错误命名,它必须通过使用 WinXP 特定的宏 MS_ENH_RSA_AES_PROV_XP 来解决。
我做了XP特定的代码修改,它仍然不起作用。(bResult
在 Win XP 上返回 0 false,所有其他平台bResult
返回 1 true。)
我用我在 regedit.exe 中看到的实际键+字符串值检查了 MS_ENH_RSA_AES_PROV_XP,所以一切看起来都可以正常工作但没有成功。
我是否忽略了一些使它在 Windows XP 上工作的东西?
我已经粘贴了最短的例子来说明这个问题。我使用了 VS2010 C++。
Windows 7 成功:
Windows XP 故障:
java - 使用 java 访问 MS CryptoAPI
我试图充分利用MS CAPI,却陷入了极大的恶作剧......只有 SunMSCapi 提供者,嗯,由于缺乏更好的词,至少对于签名,提供以下算法:
- 带 RSA 的 MD2
- 带有 RSA 的 MD5
- SHA1withRSA
而且我并不急于使用 BouncyCastle 使用的算法GOST3411withECGOST3410
,或者RIPEMD128withRSA
,但它会很好,并且在这种特殊情况下,如果不是必需的话,至少能够登录SHA256withRSA
算法是非常重要的。 ..(512等和ECDSA加密,将是一个很大的优势,但我不期望那么多)。
我正在尝试寻找替代方案,但只找到了这个 wrapper,看起来不错,但我必须再挖掘一下。
有谁知道访问 mscapi (cryptoapi) 的另一种方式、包装器或提供程序?
有关的: