C/C ++使用公钥加密/解密
-
29-09-2019 - |
题
我正在寻找与以下两个功能相似的两个功能:
// 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_key
和 private_key
从基本上可以是任何东西,从具有某些命令(GPG/SSL的东西或其他)的键到与其他命令生成的键 简单的 职能。
我已经研究了一些密码库(libgcrypt,libgpgme,openssl ...),但是使用这些库来实施此类功能,这似乎并不容易:它们需要关于不对称加密的不屈服的知识,很多代码。
无论如何,这项任务似乎并不少见。如何实现上面的两个函数?
解决方案
不幸的是,加密 总是 需要对所涉及的算法有非卑鄙的知识。很难正确。 “应用密码学手册”是可用的各种算法的相对可读指南,因此可能值得一看。
你也可以尝试 cryptlib. 。它似乎具有良好的设计,可为您提供许多参数的明智默认值,因此您希望您可以开始而无需过多担心细节。
其他提示
当有人要求轻松加密时,我只能推荐 Keyczar.
它不仅提供了几种语言(可以使用相同键)的干净界面,还提供了处理密钥旋转等的机制。
当然,实施的算法的安全默认值使您不必担心技术细节。
确实,到目前为止,我见过的更好的简单安全组合。
假设您不需要平台不可知论,那么密码学下一代(CNG)是Windows上相对较新的加密API,令人惊讶地直观且易于使用。我写了一篇文章,其中包括您在典型应用程序中可能需要的所有主要加密操作的示例。本文的示例代码还提供了使用Visual C ++编译器为这些操作的完整工作示例。
http://msdn.microsoft.com/en-us/magazine/cc163389.aspx
要将公共和私钥视为字符串,您可以简单地使用Base64或类似的编码。