我打算编写一个小应用程序,其基本思想是用户可以相互共享加密信息。一个小场景:Alice写了一个备忘录(数据格式已知),应用程序加密这个备忘录并将备忘录保存在应用服务器上。现在爱丽丝想与鲍勃分享这份备忘录。 Alice打开应用程序,搜索用户“Bob”并接收Bob的公钥。应用程序使用Alice和Bob的密钥加密备忘录,并将备忘录保存在服务器上。现在鲍勃也能够阅读备忘录。
用户的私钥仅属于安装应用程序的设备。它永远不会通过网络传输。然而,我想用用户的密码“加密”私钥,因此它可以以(相对)安全的方式存储在设备上,只有输入正确的密码才能“解密”。如果用户的密码更改,则不应更改密钥本身,因为这会导致必须使用此新密钥再次加密所有数据。相反,用户必须输入旧密码,密钥将被解密并使用新密码重新加密。
是否有任何功能(可能在OpenSSL中?)用密码“加密”或保护密钥?
注意:私钥可能存储也可能不存储在密钥库中。因为应用程序将在许多平台上运行,所以事先并不清楚哪个密钥库可用。
答案 0 :(得分:4)
是否可以将PGP集成到我自己的应用程序中?
GnuPG Made Easy (GPGME)“是一个旨在使应用程序更容易访问GnuPG的库。它提供了用于加密,解密,签名,签名验证和密钥管理的高级加密API。”
答案 1 :(得分:3)
使用OpenSSL
,您可以将密钥保存为受保护的格式(BEGIN RSA ENCRYPTED...
)。您可能想要使用的示例功能(我省略了事先要求的所有操作,但它们非常基本)。
PEM_write_PKCS8PrivateKey(pFile, m_pKey, cipher, sPass, iPassLen, 0, NULL)
其中cipher
是您的加密算法,具有适当的类型。更多(有示例!):https://www.openssl.org/docs/manmaster/crypto/pem.html