13

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

// 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 );

wherestring可以是 a char*, astd::string或可以轻松转换为这两者的东西。并且基本上可以是任何东西,从使用某些命令(gpg/ssl 等)生成的键,到使用其他public_key简单功能生成的键。private_key

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

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

4

3 回答 3

7

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

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

于 2010-11-08T13:33:08.207 回答
5

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

它不仅提供了多种语言的简洁界面(可以使用相同的键),还提供了处理键轮换等的机制。

当然,实现算法的安全默认值,这样您就不必担心技术细节。

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

于 2010-11-08T17:33:31.057 回答
0

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

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

要将公钥和私钥视为字符串,您可以简单地使用 Base64 或类似的编码。

于 2010-11-08T13:32:53.033 回答