2011-11-22 124 views
1

我正在将C#代码转换为VC++(不支持.net)。我遇到下面的代码行。C++的RSA加密

RSA.VerifyData(hash, "SHA1", signature) 

如何做到这一点?这里哈希是加密的信息。签名是从用户端检索的信息。该函数返回一个布尔值。有什么方法可以直接在C++中对char *执行相同的验证?

+1

是的,你需要找到一个C++ RSA库。 –

+0

您正在寻找CAPI或CNG。 – SLaks

回答

2

检查CPVerifySignatureCryptVerifySignature函数 - 可在CryptoAPI(Windows本机)中使用。

+0

你可能也想看看[这个](http://stackoverflow.com/questions/108518/rsa-encryption-library-for-c)问题,因为还有其他几个库提议...但是,它会引入额外的依赖关系... – xmoex

+0

@布莱恩:对于美国来说,这可能是真的......我不是美国政界关于密码相关法律的专家。我看到你的观点一致,因此使用微软的API,但为了完整起见,我想指出一些替代方案... – xmoex

0

有,你可以选择一对夫妇选择从:

  • WinAPI cryptography features。显然,只有windows,C和WinAPI风格(我觉得它很痛苦,而且反直觉)。 CAPI是较旧的,而CNG是较新的(对于Vista来说是较新的)。我个人不建议这种解决方案,除非你有非常特殊的要求(1)

  • Botan提供了广泛的加密功能,包括RSA签名验证。这是我最喜欢的,它有一个很好的消息管道和过滤器模型,可以轻松地对数据使用多种算法。这个API有点过程性(实质上有一个begin_message和end_message调用来封装数据的实际写入),但是我发现它很直观,易于理解(当然这只是一个意见)。

  • Crypto++具有不同风格的API。我发现它不那么直观,我总是选择Botan在这个库上。 API似乎更正统,但不那么直接。它似乎没有比Botan更有能力,许多人确实推荐它。


(1)如果你需要由第三方评审(非常严重的使用情况,如银行软件为例)图书馆,你可能想选择CAPI毕竟,因为它允许您使用第三方审查Cryptography Service Provider