在PHP中为外部通信安全加密或创建唯一标识符?

在PHP中为外部通信安全加密或创建唯一标识符?,php,encryption,libsodium,Php,Encryption,Libsodium,我们正在开发一个PHP应用程序,将个人和匿名信息“报告”存储在MySQL数据库中 对于每个人,可能会有几个“报告”,这些报告会被发送到第三方注册中心 问题是,第三方不知道这些报告中的哪些是针对同一个人的。因此,我们希望在发送报告时为此人添加一个唯一但无法追踪的id。因为第三方不知道我们内部人员的身份 由于第三方可能希望通过其id与给定的个人进行通信,因此我们需要能够将该id解密为与个人记录一起存储的id。所以散列不起作用。我们还希望在不久的将来会有更多的外部方,我们希望为每个人提供不同的唯一id

我们正在开发一个PHP应用程序,将个人和匿名信息“报告”存储在MySQL数据库中

对于每个人,可能会有几个“报告”,这些报告会被发送到第三方注册中心

问题是,第三方不知道这些报告中的哪些是针对同一个人的。因此,我们希望在发送报告时为此人添加一个唯一但无法追踪的id。因为第三方不知道我们内部人员的身份

由于第三方可能希望通过其id与给定的个人进行通信,因此我们需要能够将该id解密为与个人记录一起存储的id。所以散列不起作用。我们还希望在不久的将来会有更多的外部方,我们希望为每个人提供不同的唯一id。通过使用不同的加密密钥

我们可以使用什么加密方法来加密一个人的id,这样它将始终给出相同的结果?举个例子,我认为我们每次加密一个人的id时都必须使用相同的nonce。这似乎是非常令人沮丧的。 使用AES加密时,同样的问题也会出现,通过php的where:

如果通过iv参数传入空值,则发出E_警告级别错误

我们还希望在不久的将来会有更多的外部方,我们希望为每个人提供不同的唯一id。通过使用不同的加密密钥

+

以libnaude扩展文档为例,我认为每次加密一个人的id时都必须使用相同的nonce。这似乎是非常不鼓励的


是的,甚至不用担心关键对iv/nonce部分。只要使用或。它们都为您提供经过身份验证的加密,您只需要提供一条消息和一个密钥。

如果您的个人记录中的separated列中有哈希,为什么哈希不起作用?感谢您提到Halite,我没有遇到过那个包装器库。使用其中一种方法(将iv/nonce存储在密文中)的问题是,如果需要再次加密人员id,每次都会产生不同的结果。是的,您需要为此数据集编制索引吗?使用一个单独的列并存储用户名的HMAC-SHA256,有目的地将其分开。