或者:如何为一堆用户存储加密数据?
我承认,这是一个愚蠢的问题,私钥只限于一个人,因为这个词已经暗示了。但我有以下情况:
用户Tom输入需要加密存储在数据库中的数据。用户决定要将此信息提供给Jim和Bob。用户John和Jayne一定不能解密它。当然也不是用户Tim攻击服务器并且可以访问加密数据和执行加密/解密的脚本。
我认为使用PHP openssl_public_encrypt函数的公钥/私钥方法在这里不起作用,因为两个用户需要使用“私钥”来解密数据。
我认为这是一个相当普遍的问题,但如果它很重要,那么必须在PHP(也许是MySQL)中完成。
答案 0 :(得分:14)
这就是它在OpenPGP(和其他系统)中的表现: - 您正在生成秘密对称密钥,用于加密数据本身; - 然后,这个对称密钥用Tom的密钥加密; - 此外,对称密钥可以使用Jim和Bob的公钥加密,允许他们解密密钥,然后解密数据
答案 1 :(得分:11)
PHP为此提供了一个函数 - openssl_seal()
。此函数接受一组公钥,并对数据进行加密,以便可以使用任何一个相应的私钥对其进行解密(使用openssl_open()
)。
答案 2 :(得分:3)
我不懂PHP中的库。但总的来说,程序如下:
查找“PHP和PKCS7”时应该有一些结果...
答案 3 :(得分:2)
使用与Tom的密钥不同的数据加密密钥(称为Kgeneral)。
使用Tom的公钥加密Kgeneral并将结果提供给Tom - 他可以使用他的私钥解密它并获得Kgeneral。
如果另一个用户需要访问数据,Tom(或您的应用程序)可以使用他的公钥加密Kgeneral,并让他以这种方式访问。