问题标签 [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.

0 投票
1 回答
2411 浏览

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() 来查看证书是否已经存在,并且只有当它不存在时才这样做:

重新添加证书......所以我的问题是,为什么不能保留私钥?我错过了什么吗?

0 投票
0 回答
240 浏览

windows-ce - Win CE 中的文件系统过滤器和 CryptoAPI 问题

过去两周我一直在研究文件系统过滤器,我遇到了一个有趣的问题。我基本上在一个应用程序中构建了编码/解码实现,该应用程序首先在 Platform Builder 的操作系统启动上运行,以验证它是否工作并用于调试目的。这个应用程序运行良好,能够毫无问题地获取上下文、生成密钥、加密/解密。

当我尝试在 filesys dll 加载上做同样的事情时(据我所知,这是加载文件系统过滤器的点),我的文件系统过滤器似乎没有可用的 CSP 服务。CryptAcquireContext 因 NTE_BAD_KEYSET 而失败,或者当我尝试使用默认提供程序时,它因 NTE_PROV_TYPE_NOT_DEF 而失败。

沮丧的是,我编写了一些代码来枚举当时所有可用的提供程序,结果发现在加载 filesys 时没有任何提供程序,想知道是否有人有任何经验或想法可以提供帮助。我已经正式用完了想法。

干杯伯纳德

0 投票
1 回答
264 浏览

lisp - 禁用 lispworks capi:push-button-panel 上的单个按钮

我正在使用 common lisp 和LispWorks CAPI开发 Connect Four 游戏。除了一件事之外,我已经完成了界面:我使用按钮(在按钮面板中)将片段放入列中,并且我想在相应列已满时禁用按钮。我对 lisp 比较陌生,而且我特别不了解面向对象的东西,所以我不知道该怎么做。

可以这样创建一个按钮:

并因此禁用:

类似地创建一个按钮面板,除了它需要一个:items参数,即面板中的按钮列表(或数据,CAPI 将创建按钮)。

我只需要知道如何禁用按钮面板的各个按钮。如果你能解释最后一段代码中发生的事情,那就太好了,因为我根本不明白。

谢谢!

0 投票
2 回答
12091 浏览

c# - 如何通过 C# 使用 CryptoAPI?

有一组 CryptoApi 函数可与加密服务提供商 (CSP) 一起使用。

是的,我知道有 System.Cryptography 命名空间。但我不需要他们的实现。

是否有任何现成的库为这些函数提供 .NET 包装器?

0 投票
1 回答
1374 浏览

openssl - 如何通过 Indy 在 openSSL 1.0.0 Win32 中动态加载 Crypto Api (capi.dll)?

我使用 Indy 10,我希望我的 http 客户端使用 Windows 商店证书。我使用 openssl 库 1.0.0d,它应该允许我加载 capi.dll,但加载总是失败。

有任何想法吗?

谢谢

0 投票
1 回答
4344 浏览

c++ - 如何使用 CAPI 的 CryptImportKey 和 PEM 编码来自 OpenSSL 的公钥?

如何让 Microsoft 的 CryptoAPICryptImportKey函数导入PEM编码密钥?它确实有效,但CryptDecrypt返回错误。

0 投票
1 回答
1992 浏览

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 签名完全不同。
0 投票
3 回答
4340 浏览

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 位应用程序时遇到的任何问题。

文章非常受欢迎。

0 投票
1 回答
3909 浏览

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 故障: 在此处输入图像描述

0 投票
2 回答
3361 浏览

java - 使用 java 访问 MS CryptoAPI

我试图充分利用MS CAPI,却陷入了极大的恶作剧......只有 SunMSCapi 提供者,嗯,由于缺乏更好的词,至少对于签名,提供以下算法:

  • 带 RSA 的 MD2
  • 带有 RSA 的 MD5
  • SHA1withRSA

而且我并不急于使用 BouncyCastle 使用的算法GOST3411withECGOST3410,或者RIPEMD128withRSA,但它会很好,并且在这种特殊情况下,如果不是必需的话,至少能够登录SHA256withRSA算法是非常重要的。 ..(512等和ECDSA加密,将是一个很大的优势,但我不期望那么多)。

我正在尝试寻找替代方案,但只找到了这个 wrapper,看起来不错,但我必须再挖掘一下。

有谁知道访问 mscapi (cryptoapi) 的另一种方式、包装器或提供程序?


有关的: