C / C ++使用公钥加密/解密

时间:2010-11-08 13:20:05

标签: c++ c encryption-asymmetric

我正在寻找两个在概念上类似的功能:

// returns the encrypted text
string encrypt( string public_key, string pass_phrase, string text );
// returns the original text
string decrypt( string private_key, string pass_phrase, string encrypted_text );

其中string可以是char*std::string或可以轻松转换为这两者的内容。 public_keyprivate_key基本上可以是任何东西,从使用某些命令(gpg / ssl stuff或其他)生成的密钥到使用其他简单函数生成的密钥。

我已经研究了一些加密库(libgcrypt,libgpgme,openssl ...),但用这些库实现这些函数看起来并不容易:它们需要关于非对称加密的非肤浅知识还有很多代码。

无论如何,这项任务似乎并不罕见。 如何实现上述两个功能?

3 个答案:

答案 0 :(得分:7)

不幸的是,加密总是需要对所涉及算法的非肤浅的了解。很难做对。 “应用密码学手册”是可用的各种算法的相对可读的指南,所以它可能值得一看。

您也可以尝试cryptlib。它似乎有一个良好的分层设计,为您提供了许多参数的合理默认值,因此您可以在不必过多担心细节的情况下开始使用。

答案 1 :(得分:5)

当有人要求轻松加密时,我只能推荐KeyCzar

它不仅提供了多种语言的干净界面(可以使用相同的键),还提供了处理键旋转等的机制。

当然,所实施算法的安全默认值使您无需担心技术细节。

真的,更容易和更好到目前为止我见过的安全组合。

答案 2 :(得分:0)

假设您不需要与平台无关的东西,新一代加密技术(CNG)是Windows上相对较新的加密API,具有令人惊讶的直观性和易用性。我写了一篇文章,其中包括您在典型应用程序中可能需要的所有主要加密操作的示例。本文的示例代码还使用Visual C ++编译器为这些操作提供了完整的工作示例。

http://msdn.microsoft.com/en-us/magazine/cc163389.aspx

要将公钥和私钥视为字符串,您只需使用Base64或类似的编码。