问题标签 [wincrypt]

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 投票
2 回答
4077 浏览

c++ - 使用 WinCrypt 的 AES-128 加密

我需要为使用 WinCrypt 的 C/C++ 应用程序在 AES-128 下加密字符串。

只是为了了解整个事情是如何工作的,我编写了一个程序来使用 16 字节 AES 密钥(128 位)加密 16 字节字符串,但它没有按预期工作(并且 MSDN 示例没有帮助)。

我的主要问题是调用 CryptEncrypt,我可能不清楚如何使用参数:

  • *pb数据
  • *pdwDataLen
  • dwBufLen

这是我的代码:

cmd中的输出是:

在此处输入图像描述

谁能解释一下为什么解密的字符串更长,正确使用 CryptEncrypt 的三个参数?我将最后一个值设置为 32,因为经过反复试验,这是使这些东西起作用的唯一值。请帮助,并在此先感谢您!

0 投票
0 回答
193 浏览

c++ - VS2015 中的 CryptDestroyKey 访问冲突异常

我正在执行 C++ 项目中的一项任务,将某些组件从使用 VS2010 构建升级为使用 VS2015 构建,并注意到一个奇怪的行为,我在网上找不到任何讨论。简化代码如下:

和预编译的头文件:

如果我尝试使用 VS2010 构建和运行此代码片段,CryptGenKey 返回错误结果和 hKey 值为 0。将 hKey 传递给 CryptDestroyKey 返回 false,但不会引发异常。

如果我尝试使用 VS2015 构建和运行此代码片段,CryptGenKey 返回错误结果和 hKey 值为 0。将 hKey 传递给 CryptDestroyKey 会引发访问冲突异常。

有人可以解释这个实现背后的原因以及为什么 Windows 在更新的 VS 版本中不能处理 0 吗?如果他们自己不管理 0,这可能是其他项目的潜在问题。

0 投票
1 回答
92 浏览

c++ - Wincrypt Diffie Hellman 错误

我正在尝试使用 wincrypt 使用 P 和 G 值生成私钥。我得到ERROR_INVALID_PARAMETER我不确定我的代码有什么问题。它与 microsoft 网站中给出的示例代码中的实现相同。 https://msdn.microsoft.com/en-us/library/aa381969(VS.85).aspx#exchangeing_diffie-hellman_keys

我在最后一个CryptSetKeyParam中遇到错误。请指教。

提前致谢。

0 投票
1 回答
179 浏览

c++ - CryptSetKeyParam 中的 NTE_BAD_DATA,同时在 wincrypt 中设置 KP_P

我有下面的代码。我正在使用 char * 为 diffie-hellman 算法设置一个素数。设置素数后,我得到了错误的数据。我在哪里做错了?我在此链接中遵循了相同的示例。 https://msdn.microsoft.com/en-us/library/aa381969(VS.85).aspx#exchangeing_diffie-hellman_keys

使用 wincrypt 在 diffie-hellman 中设置素数的正确方法是什么?

提前致谢。

更新 1:感谢@RbMm,我能够设置素数。问题在于 DHKEYSize。但是我在设置KP_X时遇到错误。更新了上面的代码以反映新代码。

在这里,我将字符串转换为十六进制字节数组。

0 投票
0 回答
465 浏览

c++ - STATUS_INVALID_PARAMETER 错误使用 BCryptImportKeyPair 导入 diffie hellman 公钥

我正在尝试将公钥添加到 Bcrypt 的 diffie Hellman 实现中。 建议创建和导出公钥的示例。就我而言,我已经从客户端获得了公钥。我正在尝试使用该公钥来生成共享会话密钥。当我尝试使用 BCryptImportKeyPair 时,我得到了 STATUS_INVALID_PARAMETER。我创建了 PBCRYPT_DH_KEY_BLOB 并手动添加了这些值。有没有其他方法可以做到这一点?将公共密钥从字符串导入 BCrypt 的示例将不胜感激。

提前致谢。请检查下面的代码。

0 投票
1 回答
733 浏览

c++11 - 当我尝试导入公钥时,BCryptImportKeyPair 返回 STATUS_INVALID_PARAMETER

我按照这个例子。我正在尝试将从服务器获得的公钥添加到密钥对中,并且我得到了 STATUS_INVALID_PARAMETER。

我得到以下输出。

我尝试打印 pubKeyBlobFromServer 的字节。公钥从第 8 个字节开始。前 8 个为 BCRYPT_DH_KEY_BLOB 保留。我不确定出了什么问题。请建议我犯错的地方。如果不是,请建议一个从字符串导入公钥的示例。提前致谢。

0 投票
2 回答
542 浏览

openssl - openssl 使用的密钥协商(或密钥派生)功能是什么?

我正在尝试将 openssl 代码替换为 CNG winapi 代码。下面是我拥有的准系统 openssl 代码。

上面的代码生成了一个 256 个字符的十六进制字符串(128 字节)的共享密钥。openssl 使用什么密钥协商函数来创建这样的密钥。提前致谢。

0 投票
0 回答
108 浏览

c++ - wincrypt 输出与其他语言不匹配

我一直在尝试使用 wincrypt api,但似乎无法弄清楚为什么 CryptEncrypt 的输出与 Go 等语言的输出不匹配。

密码

去代码

如果密钥是“密码”,则输出应为:B7 90 54 62 23 1E E3 C1 13 3D CF

如果密钥是“密码”(“5f4dcc3b5aa765d61d8327deb882cf99”)的 md5 哈希,则输出应为:E4 F9 36 64 83 8A 3F 78 41 82 15

我从 wincrypt 得到的输出:a0 9d 47 51 1a 7b 32 8e 03 54 c3

我缺少一些简单的东西吗?

0 投票
1 回答
3244 浏览

python - 如何通过python从智能卡中读取证书?

我有一张智能卡(实际上是 USB 令牌),上面写有一些证书和密钥。现在我需要在 Windows 上使用 python 来检索这个证书。如何实现?

我看了一下pyscard包,但它似乎太低级了,可能不是最简单的方法。但是,如果您知道低级别的答案,那么您的帮助将不胜感激。
似乎CryptAcquireContextpywin32(win32crypt)的功能允许我使用智能卡中的私钥进行加密,但我无法获得证书本身。

你有什么建议吗?

0 投票
0 回答
2300 浏览

c++ - CryptAcquireContext 在 Windows 10 创意者更新中失败

我有一个使用 AES CFB 模式加密文件的代码。虽然代码在 Windows 7、Windows 8 和以前版本的 Windows 10 中正常运行,但在 Windows 10 Creators Update 上,此行失败:

可能是什么原因?

PS 我看到它在 MSDN 上已被弃用,但我认为该功能很常见。