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

peo*_*oro 13 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 );
Run Code Online (Sandbox Code Playgroud)

哪里string可以是a char*,a std::string或者易于转换为这两者的东西.且其中public_keyprivate_key可以是基本上什么,从与某些命令(GPG/SSL东西或任何)生成的密钥,与其它生成的密钥简单功能.

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

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

Cam*_*ner 7

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

你也可以试试cryptlib.它似乎有一个分层设计,为您提供了许多参数的合理默认值,因此您可以开始使用,而无需过多担心细节.

  • 好吧,我不太同意.我给签名的两个功能(加上另一个用于生成公钥/私钥对)应该足以使用加密.当然它们不是很可定制的,所以它们不够安全,不能用于严肃的东西,但我猜它们对99%的情况都没问题...... (2认同)
  • 我建议你也改变你的功能签名,以字节而不是字符串的形式工作.加密通常适用于不透明的字节数组,添加字符串语义只会使事情变得更难.在该层,密钥只是一组字节,密码是一组字节,而clear/cipher文本都是字节集.它们*可能*表示具有某种字符编码的字符串(ASCII,UTF-8或其他),但加密层并不关心它. (2认同)

Mat*_* M. 5

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

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

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

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