是否可以使用多个私钥(PHP)进行加密?

Is it possible to have encryption with multiple private keys (PHP)?

或者:如何为一群用户存储加密数据?

我承认,这是一个愚蠢的问题,一把私人钥匙只限于一个人,正如这个词已经暗示的那样。但我有以下场景:

用户tom输入需要加密存储在数据库中的数据。用户决定要将此信息提供给Jim和Bob。用户john和jayne不能解密它。当然,也不适用于入侵服务器并访问加密数据和进行加密/解密的脚本的用户tim。

我认为使用phps openssl_public_encrypt函数的公钥/私钥方法在这里不起作用,因为两个用户需要使用"private"密钥来解密数据。

我想这是一个相当普遍的问题,但是如果它很重要,就必须用php(也可能是mysql)来完成。


这就是它在OpenPGP(以及其他系统)中的实现方式:-您正在生成用于加密数据本身的机密对称密钥;-然后,这个对称密钥用汤姆的密钥加密;-另外,对称密钥可以用Jim和Bob的公钥加密,允许他们解密密钥,然后解密数据。


php为此-openssl_seal()提供了一个函数。此函数接受一组公钥,并对数据进行加密,以便可以使用相应的任何一个私钥对其进行解密(使用openssl_open())。


我不知道PHP中的库。但一般来说,程序如下:

  • 使用对称密钥加密数据
  • 对于每个收件人,使用收件人的公钥加密密钥
  • 所有这些都保存在一个pkcs 7文件结构中。

在查找"php和pkcs7"时应该会有一些结果…


使用与Tom的密钥不同的数据加密密钥(称为Kgeneral)。

用Tom的公钥加密Kgeneral并将结果提供给Tom-他可以使用他的私钥解密并获取Kgeneral。

如果另一个用户需要访问数据,那么Tom(或您的应用程序)可以用他的公钥加密kgGeneral,并给他这样的访问权。