问题标签 [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.
c++ - 从 WinHTTP 中的 CRYPT_BIT_BLOB 获取 RSA 公钥?
我正在尝试在 WinHTTP 中获取 RSA 公钥信息。到目前为止,我已经获得了CERT_CONTEXT
结构中的证书信息。我可以得到加密算法和其他如下:
加密算法由
我们可能会得到如下的公钥:
但根据文档,这是一种编码形式:
公钥
包含编码公钥的 BLOB。
那么如何获得模数和指数等实际的 RSA 公钥参数呢?
c++ - 如何解密存储在 BSTR 中的加密数据
我在本网站上看到了有关此主题的其他链接,但它们没有帮助。如果有人可以帮助我,我将不胜感激。
我正在阅读使用 Visual Studio C++ 2010 express 使用 WinCrypt API 生成的一行加密文本,如下所示:
调试器显示element
指向:
element
具有数据类型wchar_t *
,但是为了进行解密,我需要它作为 char *. 使用 WinCrypt 使用 RC4 对数据进行加密。我已经尝试过wcstombs
了,它根本不起作用。结果cmds
在"[][]"
。
我不确定我做错了什么,但我需要以某种方式将这些数据作为一个char *
,或者我可能完全错过了一些东西。从我在 MSDN 上读到的内容来看,我似乎需要指定一个新的语言环境……但我不确定要指定哪个语言环境才能使这些数据有意义……
这是完整的代码:
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”
c++ - AES128/ECB(OpenSSL 和 WinCrypt)的错误加密结果
我正在尝试使用 AES128(ECB 模式)加密文本块,以测试我使用的 ECB-AES123 测试向量产生的加密/解密功能,来自“建议块密码操作模式:方法和技术,NIST 特别出版物 800 -38A,2001 年版; “。
例如:
对于 OpenSSL,以下代码完美运行:
但同时我需要使用 Microsoft 的 Crypto API 实现相同的功能。以下是应该这样做的代码:
但是这段代码会产生不同的结果。
- 如果“Final”为 TRUE(如上所示),input_data 的大小将是 32 字节,这根本与预期值不匹配。根据 MSDN,没关系,因为在这种情况下,数据会附加一个额外的填充块。
- 如果“Final”为 FALSE,则 input_data 将具有预期的大小(16 字节),但结果也会错误。
我一直坚持这个案子,我不明白我错过了什么。是否可以产生与 OpenSSL 相同的结果(根据规范预期)?为什么 ECB 模式下的 AES128 会改变结果的大小(在 ECB 模式下不应该这样做)?
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
已定义,它是:
我一直在尝试一整天......有人有线索吗?
非常感谢 !
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 位编译。
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++
c++ - 文件未完全解密,AES CBC 模式。第一个块没有解密。WCAPI
好的,所以我有 5 个要加密的文件。我没有设置 IV。
第一个文件解密没问题,
那么剩余文件的第一个块不会被解密。
所以文件解密了 99%。
我尝试将 IV 设置为静态值和随机值,结果相同。
我加密的第一个文件不必是我解密的第一个文件,它可以 100% 解密。
这让我相信它与解密有关?
因此,对于加密,我导入了一个 aes 密钥来创建一个密钥句柄。
然后我加密一个文件并使用相同的密钥句柄移动到另一个文件......
我应该为每个文件都有一个新的密钥句柄吗..?
有清除钥匙柄的功能吗?
有什么东西告诉我 WCAPI 正在使用最后一个文件的最后一个块作为下一个文件的 IV?
如果我可能会误解某些东西,请原谅我。
这是decrypt_file函数:
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?
c# - 在 C++ 和 C# 中使用相同的加密方法
背景:我正在开发一个应用程序,该应用程序需要一个许可过程来增加一些安全性。该应用程序是主要的 C#,但它有一小部分(实际上是一个独立的模块)是用 C++ 编写的。
后者已经实现了一个许可过程,总而言之包括:当应用程序初始化时,它会查找包含加密信息的许可文件,该文件由开发人员根据一些客户信息 (a string
) 生成。如果文件有效,应用程序将继续执行,否则将关闭。它的重要部分是它使用wincrypt.h
库向字符串添加加密。
愿望:两个部分(或模块)必须具有基于许可证的安全性,并且应该共享相同的许可证文件。
问题:我正在尝试将之前描述的安全过程调整为 C#,以便在应用程序的其他部分使用它。我还没有找到一种使用wincrypt.h
函数来做到这一点的方法(可能是因为我对 C# 的了解不是那么好,或者可能是因为我根本无法做到这一点)。我最终使用了 RSA,但最终使用了两种不同的加密方法。
问题:有没有wincrypt.h
在 C# 中使用的方法?string
如果没有,是否有任何其他方法可以开发可在 C++ 和 C# 中使用的进程的(en|de)cription ?
任何帮助表示赞赏。