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

时间:2011-01-05 14:27:30

标签: php encryption private-key

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

我承认,这是一个愚蠢的问题,私钥只限于一个人,因为这个词已经暗示了。但我有以下情况:

用户Tom输入需要加密存储在数据库中的数据。用户决定要将此信息提供给Jim和Bob。用户John和Jayne一定不能解密它。当然也不是用户Tim攻击服务器并且可以访问加密数据和执行加密/解密的脚本。

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

我认为这是一个相当普遍的问题,但如果它很重要,那么必须在PHP(也许是MySQL)中完成。

4 个答案:

答案 0 :(得分:14)

这就是它在OpenPGP(和其他系统)中的表现: - 您正在生成秘密对称密钥,用于加密数据本身; - 然后,这个对称密钥用Tom的密钥加密; - 此外,对称密钥可以使用Jim和Bob的公钥加密,允许他们解密密钥,然后解密数据

答案 1 :(得分:11)

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

答案 2 :(得分:3)

我不懂PHP中的库。但总的来说,程序如下:

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

查找“PHP和PKCS7”时应该有一些结果...

答案 3 :(得分:2)

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

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

如果另一个用户需要访问数据,Tom(或您的应用程序)可以使用他的公钥加密Kgeneral,并让他以这种方式访问​​。