问题标签 [cryptoapi]
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.
.net - 如何在我的 .NET 应用程序中使用从 Win32 CryptoAPI 生成的密钥 blob?
我有一个用 C++ 为 Windows 编写的现有应用程序。此应用程序使用 Win32 CryptoAPI 生成 TripleDES 会话密钥,用于加密/解密数据。我们使用一个技巧的指数将会话密钥导出为 blob,这允许 blob 以解密格式存储在某处。
问题是我们如何在 .NET 应用程序 (C#) 中使用它。该框架封装/包装了 CryptoAPI 所做的大部分工作。部分问题是 CryptAPI 指出Microsoft 增强加密提供程序的 TripleDES 算法是 168 位(3 个 56 位的密钥)。但是,.NET 框架声明它们的密钥是 192 位(3 个 64 位的密钥)。显然,.NET 框架中的 3 个额外字节是为了奇偶校验?
无论如何,我们需要从 blob 中读取关键部分,并且能够以某种方式在我们的 .NET 应用程序中使用它。目前,当我们尝试在 .NET 中使用密钥时,我们没有得到预期的结果。解密失败得很惨。任何帮助将不胜感激。
更新:
我一直在想办法解决这个问题,并提出了一个我会及时发布的解决方案。但是,仍然会感谢其他人的任何反馈。
encryption - 跨机器加密/解密是禁忌
我在 XP 和 Vista 之间使用了对“CryptUnprotectData”(从 Crypt32.dll 公开)的相同调用。在 XP 中运行良好。在 Vista 中运行时出现以下异常:
正如预期的那样,crypt32.dll 的版本在 XP 和 Vista 之间是不同的(w/XP 实际上有更新的版本,可能是 SP3 或其他一些更新的结果)。
更具体地说,我正在加密数据,将其放入注册表,然后使用“CryptUnprotectData”读取和解密。UAC 已关闭。
有人见过这个吗?
cryptography - 我有 P & G——如何使用 Wincrypt API 生成 Diffie-Hellman 密钥对?
这里有一篇 MSDN 文章,但我并没有走得太远:
在这里失败NTE_BAD_DATA
。我正在使用MS_DEF_DSS_DH_PROV
. 是什么赋予了?
cryptography - 我正在为 Diffie-Hellman 使用 Wincrypt——我可以以纯文本格式导出共享密钥吗?
好的——感谢Mike,我能够让 Wincrypt 生成一个 Diffie-Hellman 密钥对。我想通了导出公钥,以及如何导入对方的公钥。根据文档,在导入对方的公钥后,共享的秘密就被计算出来了。伟大的。
我现在需要掌握那个共享的秘密,但我认为这是不可能的。除非我调用将算法 id 从更改为其他类型,否则只需调用失败CryptExportKey
类型即可。但我不想要别的东西,我想要共享的秘密。然而,API 似乎旨在阻止这种情况。PLAINTEXTKEYBLOB
CryptSetKeyParam
CALG_AGREEDKEY_ANY
有什么想法吗?我应该注意到这里的问题是我只写了 WiFi 保护设置实现的一个方面。所以协议是为我定义的,对方没有给我HCRYPTKEYs。
cryptography - 如何使用 Microsoft ECSP 仅使用 RSA 公钥加密小数据块?
我需要使用 512 位 RSA 公钥加密一小块数据(16 字节)——对于我所知的大多数加密库来说,这是一项相当容易的任务,除了 MS CSP API,看起来。CryptEncrypt函数的文档指出
Microsoft Enhanced Cryptographic Provider 支持使用 RSA 公钥的直接加密和使用 RSA 私钥的解密。加密使用 PKCS #1 填充。
但这对我不起作用。好吧,我的代码可以正常工作并生成大小正确的加密数据块,但 openssl 无法解密它。看起来 CryptEncrypt 仍然使用对称密码。
不幸的是,我发现的所有示例都指的是组合密码学与对称密码,所以我手头没有一个工作示例,这肯定会使事情变得更容易。
请任何人指出这样一个例子,或者让我知道我是否错过了一些不那么明显的陷阱?
谢谢你。
cryptography - 有没有办法使用 CryptoAPI 创建私钥并为其播种?
我们需要创建一个以 2 个明文密钥为种子的私钥。2 个明文密钥由不同的管理器维护。这是为了满足我们拥有的双重控制关键要求。我们可以将这两个键组合成一个种子。但是,通过阅读 Microsoft CryptoAPI 文档,所有密钥生成都是完全随机的,无法提供种子。这是真的?如果是,您能否建议创建此密钥的替代解决方案?
注意:密钥将存储在密钥容器中并标记为不可导出。
cryptoapi - Microsoft 是否提供连接到其自己的 MS CryptoAPI 的 PKCS #11 提供程序?
我希望使用 PKCS #11 接口运行一些测试,并且想知道 Microsoft 是否提供了基于软件的实现来提供 PKCS #11 功能?
与其等待 HSM 到达并正确配置,我宁愿现在就开始测试与接口的交互。
java - Java 安全 - MSCAPI 提供程序:如何在不弹出密码的情况下使用?
我设法在我的应用程序中使用了Sun 的 MSCAPI 提供程序。我现在遇到的问题是它总是弹出一个窗口,要求输入密码,即使我已经在代码中提供了密码。这是一个问题,因为我需要 Web 服务中的加密功能。
这是我现在拥有的代码:
这很好用,但是在运行最后一行时,我会弹出一个询问密码的窗口。我该如何防止呢?
c# - P/Invoking CryptImportKey 和封送结构
我正在尝试从 C# P/Invoke 到 CryptImportKey 以设置一个已知密钥,然后再加密将在某个时候在 C++ Win32 服务中解密的数据。我有 P/Invoke 的方法签名,一切正常,但我无法让它接受我的密钥 blob。C++ 结构在下面的注释中,我的用于编组的 C# 结构在下面。
然后我使用:
要进入一个字节数组以传递给 CryptImportKey 但它似乎从来没有带走密钥,当我用它加密时,我得到不同的密文时间,表明它没有使用我的密钥。
编辑:
关键 blob 内容来自我拥有的可以成功加密和解密数据的 C++ 代码。我认为您可能对包含两次的标头有所了解,但我遇到的主要问题是 Byte[] rgbKeyData 的值没有被放入字节数组 arr 中。
windows - 微软 CryptoAPI 书
我需要使用 Microsoft CryptoAPI 编写自己的 SSL 套接字(CSocket ansestor)和服务器端证书验证。
你能告诉我哪本书对我有帮助(或任何其他用户友好的信息来源)?