问题标签 [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.
c# - C# 中等效的加密 API 函数
早些时候,我们的 Application-A 使用 C++,并且在将消息发送到 Application-B 之前使用 C++ 中的加密 API 函数对消息进行了签名,与http://msdn.microsoft.com/en-us/library/中描述的示例完全相同windows/桌面/aa382372%28v=vs.85%29.aspx。
此消息再次由 Application-B 使用 C++ 中的 Crypto API 函数验证(上面的示例再次讨论了如何验证已签名的消息)。
现在我们正在将旧的 C++ Application-A 转换/迁移到 C#。我已经找到了一种在 C# 中使用 P-Invoke对消息进行签名的方法,并且当签名消息由 Application-B 验证时(使用 C++ CryptVerifySignatureMessage)一切正常。示例可在 - http://blogs.msdn.com/b/alejacma/archive/2008/02/21/how-to-sign-a-message-and-verify-a-message-signature-c.aspx .
正如@CodeInChaos在他的评论中提到的那样,我希望将互操作工作留给框架(不使用 P-Invoke 或其他 3rd 方实现,如 BountyCastle)
所以想知道 .net 是否提供任何 API 来签署消息(作为学习视角),如果是,我该如何实现。
笔记:
我已经尝试过.Net 提供的加密包装 API RSACryptoServiceProvider 。
但发现与 C++ 中 CryptSignMessage 的返回值(字节数组)和 C# 中的 RSACryptoServiceProvider.SignData() 方法的返回值(字节数组)存在重大差异。
• CryptSignMessage:CryptSignMessage 函数创建指定内容的散列,对散列签名,然后对原始消息内容和签名散列进行编码。
• RSA.SignData:使用指定的散列算法计算指定字节数组的散列值,并对生成的散列值进行签名。
由于这种差异,Application-B 在验证消息时会抛出错误,说“无效签名”。
所以我不能使用.net 提供的这个 RSACryptoServiceProvider 类型。有没有其他方法可以使用任何 .NET API 来实现相同的目标?(使用 .net API 时,输出字节数组应与使用上述 PInvoke 示例时的输出字节数组相似),以便 Application-B 可以正常工作。
任何帮助表示赞赏。
java - 如何在 Java 中从 USB 令牌获取 KeyStore
我有一个带有有效证书的 SafeNet 5100 eToken,我用它来访问我公司需要它的 Web 应用程序(多因素身份验证)。
我正在创建一个桌面应用程序来访问这个网站。我已经能够将网站的证书添加到TrustStore
并将我的证书放入KeyStore
.
到目前为止,我得到的是:
当我运行此代码时,我得到:
当我输入正确的令牌密码并且输入错误的密码时,我会收到此错误,所以我认为我永远不会以正确的方式传递密码。
为什么我会收到异常?
- - - - - 更新 - - - - -
我创建了一个配置文件,其中包含指向我的 PKCS11.dll 库的以下信息:
在主要功能中我添加:
现在我把它当作一个错误:
我还尝试将 Keystore.getInstance 修改为:
然后我得到这个不同的错误:
--------- 更新 2(工作代码) ---------
我的最终工作代码是:
我必须或在运行配置中设置调试参数:
或者在 .cfg 文件中设置插槽:
c++ - 如何使用 Microsoft CryptoAPI 设置 CFB-128?
我正在使用MS_ENH_RSA_AES_PROV
提供PROV_RSA_AES
者类型的提供者。我选择了带密码模式CALG_AES_128
的分组密码算法。CRYPT_MODE_CFB
我想将KP_MODE_BITS
key 参数设置为 128,但CryptSetKeyParam()
通过传递大于 64 的值调用总是返回 NTE_BAD_DATA (0x80090005L)。
如何使用 CryptoAPI 设置 CFB-128?谢谢。
java - 使用 MSCAPI 和 IAIK 的 InvalidKeyException
我在我的应用程序中使用 Sun 的 MSCAPI 提供程序来检索签名证书。签名者的私钥是 sun.security.mscapi.RSAPrivateKey。IAIK 似乎无法识别此类(请参阅下面的错误)。我不懂为什么。我的问题有什么解决方案?
提前致谢 !
编辑 :
这是我的“脏”类测试:
c++ - C++ Microsoft CryptoAPI 中的 AES/Rijndael
如何使用 Microsoft CryptoAPI(CryptDeriveKey、BCrypt[...] 函数、CryptAcquireContext 等)将以下加密代码(VB.NET 4.0)转换为等效的 C++ 代码?(我在 Internet 上没有找到一篇描述使用 Microsoft CryptoAPI 的 AES 的文章……)
和解密一个:
(注意:我已经有关于 SHA-512 方法的 C++ 代码,所以不要为此烦恼。)
c++ - 使用 WinCrypt/CryptoAPI 验证基于 OpenPGP 的 RSA 签名
我有解析 OpenPGP 数据包的代码,并且我有n
公钥e
数据包以及s
签名数据包作为字节数组的代码。
为了验证我首先初始化的签名CryptAcquireContext
(我也尝试使用PROV_RSA_FULL
而不是PROV_RSA_AES
)
然后创建一个哈希
并使用CryptHashData
. 到目前为止,这可以使用 . 解析和导入公钥CryptImportKey
。
CryptVerifySignature
GetLastError()
解码失败INVALID_SIGNATURE
。
在https://www.rfc-editor.org/rfc/rfc4880#section-5.2.2我读到
这是需要的还是自动完成的CryptVerifySignature
?如果没有,该怎么做?
security - MSCAPI : CNG 和安全描述符
Windows API 提供了在对象上设置安全描述符的方法(例如,允许设置访问控制列表)。
由密钥存储提供程序(KSP)托管的加密密钥的安全描述符可以使用NCryptSetProperty
(以及正确的标志和参数集)来评估。
Cryptography Provider Development Kit (CPDK)不需要对安全描述符的任何强制支持(并且在没有创建用户帐户的专用服务器上,设置访问控制列表确实可能没有用)。
有人知道某些 Microsoft 应用程序是否期望 KSP 支持安全描述符?(例如 Active Directory 证书服务)
iis-7.5 - Microsoft CryptoAPI 在 Windows Server 2008 R2 上的 Web 服务中不起作用
我们有一个使用 Microsoft Crypto API 进行加密的 Web 服务。它在 Windows Server 2003 上作为 Web 服务运行良好。由于某种原因,它在我们试图将其移至的 Windows Server 2008 R2 上作为 Web 服务无法运行,尽管相同的代码在服务器上运行在常规的 Windows 应用程序中(即:不是 Web 服务)。
是否有某种安全设置或类似的设置需要更改才能使其正常工作?Windows Server 版本之间显然发生了一些变化。它是在 IIS 下运行的 32 位 Web 服务。
windows - 测试 MS-CAPI CSP,即使使用 WinDbg 内核调试,签名也会失败
尝试在 Win 7 下测试新的 CSP。将引导配置设置为允许内核调试,运行WndDbg
并选择文件:内核调试并设置为本地。尝试将 signtool 与我的新 CSP 一起使用仍会导致签名失败检查。环境是:
关于为什么内核调试器的存在不会阻止对测试 CSP 的签名检查有什么想法吗?该设置是否仅适用于远程调试环境?
java - Java 安全性 - MSCAPI 提供程序:如何仅从 USB 令牌中检索证书
我设法在我的小程序中使用了 Sun 的 MSCAPI 提供程序。
我的小程序只是列出了来自 Windows 证书存储的证书,并允许用户通过允许用户选择他/她的首选证书来签署他/她的交易。
我想防止用户在没有 USB 令牌/智能卡的情况下进行签名,这意味着如果我的小程序的私钥未存储在 USB 令牌/智能卡中,我的小程序不应显示/列出证书。
我检索这样的证书(删除了 try catch 块):
我像这样管理签名(删除了 try catch 块):
我找不到任何方法来区分证书是否来自 USB 令牌。我检查了 Certificate 和 PrivateKey 对象,但是我找不到任何对我有帮助的属性。
有关如何使用 MSCAPI 执行此操作的任何建议?或者作为 MSCAPI 替代方案的任何建议?
(我不/不能使用PKCS11的原因是需要在全球范围内支持多个品牌的令牌,并且要求小程序不应该为每个令牌在内部维护PKCS11 dll路径列表。检索dll也不接受来自服务器端的路径。所以在这种情况下,我不能使用 PKCS11。如果我错了,请纠正我。)