在 PHP 中安全地加密或创建用于外部通信的唯一标识符


Securely encrypt or create an unique identifier for external communication in PHP?

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

对于每个人,可能会有几个"报告",这些报告被发送到第三方登记册。

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

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

我们可以使用什么加密方法来加密一个人的 ID,所以它总是会给出相同的结果?查看(例如)libsodium 扩展文档,我认为每次加密一个人的 id 时,我们都必须使用相同的随机数。这似乎是非常不鼓励的。
使用AES加密时,通过php的openssl_encrypt相同的问题将适用,其中:

如果通过 iv 参数传入空值,则发出E_WARNING级错误。

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

+

查看(例如)libsodium 扩展文档,我认为每次加密一个人的 id 时,我们都必须使用相同的随机数。这似乎是非常不鼓励的。

是的,甚至不必担心"键"与"IV/nonce"部分。只需使用defuse/php-encryption或Halite。它们都为您提供经过身份验证的加密,您所需要的只是 messagekey .