【问题标题】:RSA Encryption for C++C++ 的 RSA 加密
【发布时间】:2012-01-03 23:04:55
【问题描述】:

我正在将 C# 代码转换为 VC++(不支持 .net)。我遇到了以下代码行。

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

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

【问题讨论】:

  • 是的,你需要找到一个 C++ RSA 库。
  • 您正在寻找 CAPI 或 CNG。

标签: c++ visual-c++ cryptography


【解决方案1】:

检查 CPVerifySignature CryptVerifySignature 函数 - 在 CryptoAPI(Windows 原生)中可用。

【讨论】:

  • 您可能还想看看this 问题,因为还有其他几个库被提议......但是,它会引入额外的依赖关系......
  • @xmoex:由于 OP 正在从 C# 移植到 C++,并且(显然)使用了框架方法,我建议为了保持一致性,继续使用 Microsoft 的 API(或围绕它的包装器)。这可能(或可能不会 - 咨询律师)具有减少围绕加密出口法的担忧的附带好处,因为它通过调用 Microsoft 提供给用户的算法来避免在代码中包含加密算法。
  • @Brian:对于美国来说,这可能是真的……我不是美国政治方面关于密码学相关法律的专家。我明白你的观点是一致的,因此使用微软的 api,但为了完整起见,我想指出一些替代方案......
  • 我仔细阅读了这篇文章...msdn.microsoft.com/en-us/library/windows/desktop/… 第二个函数 CryptGetUserKey 抛出错误。从 GetLastError() 函数我可以看到错误是 NT_NO_KEY。请帮忙:|
【解决方案2】:

您可以选择以下几个选项:

  • 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

【讨论】:

    猜你喜欢
    • 2015-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-27
    • 1970-01-01
    • 2011-01-20
    • 1970-01-01
    相关资源
    最近更新 更多