问题标签 [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 投票
1 回答
1637 浏览

c++ - 从 WinHTTP 中的 CRYPT_BIT_BLOB 获取 RSA 公钥?

我正在尝试在 WinHTTP 中获取 RSA 公钥信息。到目前为止,我已经获得了CERT_CONTEXT结构中的证书信息。我可以得到加密算法和其他如下:

加密算法由

我们可能会得到如下的公钥:

但根据文档,这是一种编码形式:

公钥

包含编码公钥的 BLOB。

那么如何获得模数和指数等实际的 RSA 公钥参数呢?

0 投票
0 回答
220 浏览

c++ - 如何解密存储在 BSTR 中的加密数据

我在本网站上看到了有关此主题的其他链接,但它们没有帮助。如果有人可以帮助我,我将不胜感激。

我正在阅读使用 Visual Studio C++ 2010 express 使用 WinCrypt API 生成的一行加密文本,如下所示:

调试器显示element指向:

element具有数据类型wchar_t *,但是为了进行解密,我需要它作为 char *. 使用 WinCrypt 使用 RC4 对数据进行加密。我已经尝试过wcstombs了,它根本不起作用。结果cmds"[][]"

我不确定我做错了什么,但我需要以某种方式将这些数据作为一个char *,或者我可能完全错过了一些东西。从我在 MSDN 上读到内容来看,我似乎需要指定一个新的语言环境……但我不确定要指定哪个语言环境才能使这些数据有意义……

这是完整的代码:

0 投票
1 回答
556 浏览

c++ - exe 的 md5 没有给出预期的摘要

我是新来的,我希望我做对了。

我在此链接http://msdn.microsoft.com/en-us/library/windows/desktop/aa382380%28v=vs.85%29.aspx中创建了一个 c++ 应用程序,该应用程序在 microsoft 实现之后计算文件的 MD5 哈希摘要 情况是,当将 md5 哈希摘要与任何计算 md5 摘要的现成工具进行比较时,任何类型的文件都是正确的。除非手中的文件是像 cmd.exe 这样的可执行文件。哈希摘要是不同的,取决于 exe 的位置。如果您将 cmd.exe 移动到另一个位置,那么摘要将再次变得不同。所以我继续使用 openssl 库实现相同的功能来面对同样的问题。我注意到来自微软实现和 openssl 的哈希摘要是相同的。所以我认为在传递文件以计算摘要之前读取文件时缺少一些东西。但我搜索了很多,一无所获。我尝试使用 win API 中的“createfile”和“fopen”读取文件以给出相同的结果......所以请帮我解决这个问题,我错过了什么?

这是源代码

此代码计算哈希“59a1d4facd7b333f76c4142cd42d3aba”另一方面“数字火山哈希工具”和“md5 and sha checksum utility v2.1”计算哈希“fc0b4a626881d7c5980d757214db2d25”

0 投票
0 回答
1009 浏览

c++ - AES128/ECB(OpenSSL 和 WinCrypt)的错误加密结果

我正在尝试使用 AES128(ECB 模式)加密文本块,以测试我使用的 ECB-AES123 测试向量产生的加密/解密功能,来自“建议块密码操作模式:方法和技术,NIST 特别出版物 800 -38A,2001 年版; “。

例如:

对于 OpenSSL,以下代码完美运行:

但同时我需要使用 Microsoft 的 Crypto API 实现相同的功能。以下是应该这样做的代码:

但是这段代码会产生不同的结果。

  1. 如果“Final”为 TRUE(如上所示),input_data 的大小将是 32 字节,这根本与预期值不匹配。根据 MSDN,没关系,因为在这种情况下,数据会附加一个额外的填充块。
  2. 如果“Final”为 FALSE,则 input_data 将具有预期的大小(16 字节),但结果也会错误。

我一直坚持这个案子,我不明白我错过了什么。是否可以产生与 OpenSSL 相同的结果(根据规范预期)?为什么 ECB 模式下的 AES128 会改变结果的大小(在 ECB 模式下不应该这样做)?

0 投票
1 回答
1510 浏览

c++ - 未定义对 `_imp__CryptUnprotectData@28' 的引用,其中包含 Crypt32.Lib && wincrypt.h

我的一个项目有问题。
我将 QtCreator 与 MinGW 和 Qt 5.4.0 一起使用

当我尝试编译时,这条简单的行给我带来了一些错误:

(使用 DATA_BLOB* data.password 和 DATA_BLOB* data.uncryptedPassword )

得到我:

如标题所述,我在 .pro 中包含了 Crypt32.Lib 文件:

并按照MSDN api中的说明,包括 wincrypt.h :

错误仍然存​​在,我检查 wincrypt.h以确保CryptUnprotectData已定义,它是:

我一直在尝试一整天......有人有线索吗?
非常感谢 !

0 投票
0 回答
659 浏览

c++ - “unsigned long *”类型的参数与“HCRYPTHASH *”类型的参数不兼容

我在 64 位机器上的 Windows 8.1 上使用 Visual Studios 2012。我在为 c++ 编译以下代码时遇到问题,出现上述错误:

但是,这似乎是这种调用方式(这是一个具有相同调用并给我相同错误的方法)。VS 建议了一些可能的修复,我会尝试,但有谁知道为什么会发生这种行为以及如何避免它?

建议的修复是:

错误 C2664:“CryptCreateHash”:无法将参数 5 从“unsigned long *”转换为“HCRYPTHASH *”指向的类型不相关;

转换需要 reinterpret_cast、C-style cast 或 function-style cast

谢谢,

奥丹

编辑: 32 位编译不会发生这种情况,所以我想这就是我读过的示例所做的。我将更新建议的修复是否适用于 64 位编译。

0 投票
0 回答
437 浏览

php - 使用 phpseclib 使用 AES 加密文本,使用 C++ Windows Crypto API 解密文本

你好,所以我在尝试解密使用 phpseclib 使用 AES 加密的 AES 文本时遇到了一个非常奇怪的问题。

我 RSA 加密了一个 AES 密钥,我用它来加密发往服务器的消息。服务器解密 RSA 加密的 AES 密钥并使用它来解密传入的消息。

还可以加密回复。

我通过将 AES 密钥导出为 PLAINTEXTKEYBLOB 来验证密钥是否相同。

当我使用为加密原始消息而生成的 hKey HANDLE 使用 WCAPI 从服务器解密 AES 加密文本时,问题就出现了。

CryptDecrypt() 只会给我留下垃圾。解密不会产生原始消息。

我还验证了我实际上是在解密加密的消息,而不是一些随机缓冲区。

同样在我尝试解密此消息之前,我发送了一条包含我的公钥的加密消息,以便服务器可以加密下一个 AES 密钥。这是成功的。

我能够从 C++ 加密/解密到 PHP,但反之则不行。

这是PHP。

这里是 C++

0 投票
2 回答
931 浏览

c++ - 文件未完全解密,AES CBC 模式。第一个块没有解密。WCAPI

好的,所以我有 5 个要加密的文件。我没有设置 IV。

第一个文件解密没问题,

那么剩余文件的第一个块不会被解密。

所以文件解密了 99%。


我尝试将 IV 设置为静态值和随机值,结果相同。

我加密的第一个文件不必是我解密的第一个文件,它可以 100% 解密。

这让我相信它与解密有关?


因此,对于加密,我导入了一个 aes 密钥来创建一个密钥句柄。

然后我加密一个文件并使用相同的密钥句柄移动到另一个文件......

我应该为每个文件都有一个新的密钥句柄吗..?

有清除钥匙柄的功能吗?


有什么东西告诉我 WCAPI 正在使用最后一个文件的最后一个块作为下一个文件的 IV?

如果我可能会误解某些东西,请原谅我。

这是decrypt_file函数:

0 投票
0 回答
502 浏览

c - CryptEncrypt returns ERROR_MORE_DATA

I am trying to use wincrypt api to implement AES encryption/decryption. I've written this code, but it doesn't work. CryptEncrypt returns FALSE and GetLastError() == ERROR_MORE_DATA.

Whatever value I specify in pdwDataLen, it always returns FALSE and increases value in pdwDataLen by 0x10.

what am I doing wrong?

0 投票
0 回答
255 浏览

c# - 在 C++ 和 C# 中使用相同的加密方法

背景:我正在开发一个应用程序,该应用程序需要一个许可过程来增加一些安全性。该应用程序是主要的 C#,但它有一小部分(实际上是一个独立的模块)是用 C++ 编写的。

后者已经实现了一个许可过程,总而言之包括:当应用程序初始化时,它会查找包含加密信息的许可文件,该文件由开发人员根据一些客户信息 (a string) 生成。如果文件有效,应用程序将继续执行,否则将关闭。它的重要部分是它使用wincrypt.h库向字符串添加加密。

愿望:两个部分(或模块)必须具有基于许可证的安全性,并且应该共享相同的许可证文件。

问题:我正在尝试将之前描述的安全过程调整为 C#,以便在应用程序的其他部分使用它。我还没有找到一种使用wincrypt.h函数来做到这一点的方法(可能是因为我对 C# 的了解不是那么好,或者可能是因为我根本无法做到这一点)。我最终使用了 RSA,但最终使用了两种不同的加密方法。

问题:有没有wincrypt.h在 C# 中使用的方法?string如果没有,是否有任何其他方法可以开发可在 C++ 和 C# 中使用的进程的(en|de)cription ?

任何帮助表示赞赏。