我需要使用公钥/私钥系统非对称地加密数据(二进制和文本)。 目前我正在使用openssl_seal,因为我需要使用多个公钥加密数据。结果我得到一个加密的消息(很好)和两个或多个信封(这不是很好)。后者不太好,因为我必须将这些信封存储到数据库中。对于每条小消息,我需要存储至少两个信封,这些信封可能比信息本身大。
然后我想起了GnuPG:我可以给一个以上的收件人写一封邮件,并且可以加密邮件,每个人都可以用他/她自己的私钥解密邮件。不需要信封。 所以我在PHP中寻找了一个GnuPG库,但我只找到了一个linux解决方案。不满意,因为我们也有Windows系统。
是否有公共/私钥库,它可以使用多个公钥加密消息/数据而不必打扰信封?
我需要的是一个可以创建公钥/私钥集的库,2048或4096位强。
库必须具有使用一个,两个或更多公钥加密任何类型数据的功能,并且仅具有简单数据块。
库必须具有一个功能,以便可以使用任何相应的私钥解密加密数据。
任何提示或想法?也许OpenSSL中有一个特殊的功能? IIRC,我也可以用几个带有S / MIME加密的收件人写电子邮件。它只有 1 电子邮件,收据很多。没有单独的信封。
提前致谢
亨尼斯
答案 0 :(得分:2)
OpenSSL和OpenPGP(GnuPG实施)都使用对称加密来加密数据(使用一些随机密钥),然后使用非对称加密对密钥进行加密,为每个收件人加密一次。
在OpenSSL中,这在OpenPGP "会话密钥包" 中称为"信封" 。两者都包含或多或少相同的数据,因此应具有相似的大小。我不知道你是否可以让OpenSSL将所有这些作为单个blob返回,GnuPG默认情况下这样做 - 但文件大小不会显着不同。
进一步评论:
gpg --list-packets
或pgpdump
查看OpenPGP文件的内容(GnuPG不包含该文件,但提供更好的可读输出,并且已解析数字ID,即使用的算法。gpg.exe
二进制文件。但是要小心,如果这样做,有一些方法可以通过这种方式产生安全问题。