C++ 使用windows加密函数C++;

C++ 使用windows加密函数C++;,c++,visual-c++,cryptography,C++,Visual C++,Cryptography,我使用Visual Studio 2005和C++。 你好,我用了一个很好的函数来签名。有了它,我可以指定签名属性、签名人证书、未签名属性、是否分离等等 但是,该函数的参数之一是“原始文档”,根据文档,它创建指定内容的散列并对散列进行签名 我想知道我是否可以只使用文档的散列创建一个签名等价物。我没有文件,只有散列文件 我发现,但此函数不允许将参数指定为已签名属性或未签名属性和/或签名人证书。根据我的研究,这个函数似乎返回一个PKCS#1,稍后我应该在其中设置签名PKCS#7的结构。因此,如果知道

我使用Visual Studio 2005和C++。 你好,我用了一个很好的函数来签名。有了它,我可以指定签名属性、签名人证书、未签名属性、是否分离等等

但是,该函数的参数之一是“原始文档”,根据文档,它创建指定内容的散列并对散列进行签名

我想知道我是否可以只使用文档的散列创建一个签名等价物。我没有文件,只有散列文件

我发现,但此函数不允许将参数指定为已签名属性或未签名属性和/或签名人证书。根据我的研究,这个函数似乎返回一个PKCS#1,稍后我应该在其中设置签名PKCS#7的结构。因此,如果知道是否有任何方法可以使用散列进行签名,以及是否有方法使用windows函数从PKCS#1创建PKCS#7结构,我将不胜感激。或者有没有办法只对散列进行签名,就像使用CryptSignMessage一样简单

#更新1

CryptoSignHash不返回PKCS#1。返回带有PKCS#1填充的字节数组。
我尝试使用并将内容传递为“NULL”,并将哈希添加到签名属性中,它们计算空的哈希


使用Windows函数有什么方法可以做到这一点吗?

在没有自己计算哈希的情况下对哈希进行签名是个坏主意。请参阅,和。

在没有自己计算哈希的情况下对哈希进行签名是个坏主意。请参见,和。

请注意:您不应在未看到的文档上签名。这可能有重要的法律意义。谢谢。此功能将防止带宽消耗。如果您信任某人(即您有限的bandwith频道另一端的个人/程序/…),您将签署他发送给您的任何内容(无论是散列还是整个文档),您几乎可以直接将您的私钥交给他。(我仍然会回答您的问题,但我对Windows加密API一无所知,对不起。)请注意:您不应该签署您未看到的文档。这可能有重要的法律意义。谢谢。此功能将防止带宽消耗。如果您信任某人(即您有限的bandwith频道另一端的个人/程序/…),您将签署他发送给您的任何内容(无论是散列还是整个文档),您几乎可以直接将您的私钥交给他。(我仍然会回答您的问题,但我对Windows加密API一无所知,对不起。)感谢您的回复,我意识到这些链接是关于gnupg的。我想使用Windows的函数。@Cobaia:-是的,它们是指向其他程序/库的链接(该主题已在其他地方讨论过)。关键是,对一个散列进行签名是不好的,(1)你没有自己计算,或者(2)你在签名时没有计算。非常糟糕的因果报应。谢谢回复,我意识到这些链接是关于gnupg的。我想使用Windows的函数。@Cobaia:-是的,它们是指向其他程序/库的链接(该主题已在其他地方讨论过)。关键是,对一个散列进行签名是不好的,(1)你没有自己计算,或者(2)你在签名时没有计算。非常坏的业力。