C++ 在c+中使用密码保护私钥+;

C++ 在c+中使用密码保护私钥+;,c++,encryption,private-key,C++,Encryption,Private Key,我计划编写一个小应用程序,其基本思想是用户可以彼此共享加密信息。一个小场景:Alice编写一个备忘录(数据格式已知),应用程序加密该备忘录并将其保存在应用程序服务器上。现在爱丽丝想和鲍勃分享这份备忘录。Alice打开应用程序,搜索用户“Bob”,并接收Bob的公钥。应用程序使用Alice和Bob的密钥加密备忘录,并将备忘录保存在服务器上。现在鲍勃也能读备忘录了 用户的私钥仅属于安装应用程序的设备。它从不通过网络传输。尽管如此,我还是想用用户的密码“加密”私钥,这样它就可以(相对)安全地存储在设备

我计划编写一个小应用程序,其基本思想是用户可以彼此共享加密信息。一个小场景:Alice编写一个备忘录(数据格式已知),应用程序加密该备忘录并将其保存在应用程序服务器上。现在爱丽丝想和鲍勃分享这份备忘录。Alice打开应用程序,搜索用户“Bob”,并接收Bob的公钥。应用程序使用Alice和Bob的密钥加密备忘录,并将备忘录保存在服务器上。现在鲍勃也能读备忘录了

用户的私钥仅属于安装应用程序的设备。它从不通过网络传输。尽管如此,我还是想用用户的密码“加密”私钥,这样它就可以(相对)安全地存储在设备上,并且只有在输入正确密码的情况下才能“解密”。如果用户的密码更改,则不应更改密钥本身,因为这将导致所有数据都必须使用此新密钥再次加密。相反,用户必须输入旧的密码短语,密钥将用新的密码短语再次解密和加密

是否有任何功能(可能在OpenSSL中?)可以“加密”或使用密码短语保护密钥


注意:私钥可以存储在密钥库中,也可以不存储在密钥库中。由于应用程序将在许多平台上运行,因此事先不清楚哪个密钥库可用。

使用
OpenSSL
可以将密钥保存在受保护的格式中(
开始RSA加密…
)。您可能希望使用的示例函数(我省略了所有预先需要的操作,但它们非常基本)


其中
cipher
是您的加密算法,属于适当的类型。更多(带示例!)这里:

使用
OpenSSL
您可以将密钥保存在受保护的表单中(
开始RSA加密…
)。您可能希望使用的示例函数(我省略了所有预先需要的操作,但它们非常基本)

其中
cipher
是您的加密算法,属于适当的类型。更多信息(附示例!),请参见:

是否可以将PGP集成到我自己的应用程序中

是一个库,旨在使应用程序更容易访问GnuPG。它为加密、解密、签名、签名验证和密钥管理提供高级加密API

是否可以将PGP集成到我自己的应用程序中


“是一个旨在使应用程序更容易访问GnuPG的库。它提供了用于加密、解密、签名、签名验证和密钥管理的高级加密API。”

您正在重新设计PGP/GPG。因此,是的,这样的系统已经存在,您不应该试图重写它们并期望它们是安全的;)简洁而完整的答案是:是的。详细的回答是:有些库提供了一个或多个用于加密文本的函数。让我们假设它不是一个简单的应用程序。有可能在我自己的应用程序中集成PGP吗?@YSC,OP不仅在重新设计GPG,他们还在复制粘贴GPG手册中的示例;)@SergeyA OP很可能引用了一位老师的作业,他从GPG手册中复制粘贴了一个例子:)你在重新设计PGP/GPG。因此,是的,这样的系统已经存在,您不应该试图重写它们并期望它们是安全的;)简洁而完整的答案是:是的。详细的回答是:有些库提供了一个或多个用于加密文本的函数。让我们假设它不是一个简单的应用程序。有可能在我自己的应用程序中集成PGP吗?@YSC,OP不仅在重新设计GPG,他们还在复制粘贴GPG手册中的示例;)@SergeyA OP很可能引用了一位老师的作业,他复制粘贴了GPG手册中的示例:)OP应该非常清楚这一点,因为问题是GPG手册中的复制粘贴。不是,我也不是。YSC和DevSolar的答案非常有用,因为它们使我免于遇到密码学中最常见的“newbe”问题之一。我猜这是一个“永远不要实现你自己的…”的例子,OP应该非常清楚这一点,因为问题是GPG手册中的复制粘贴。它不是,我也不是。YSC和DevSolar的答案非常有用,因为它们使我免于遇到密码学中最常见的“newbe”问题之一。我想这是一个“永远不要实现你自己的…”
PEM_write_PKCS8PrivateKey(pFile, m_pKey, cipher, sPass, iPassLen, 0, NULL)