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

时间:2016-04-21 07:45:11

标签: php encryption libsodium

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

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

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

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

我们可以使用哪种加密方法来加密某个人的身份证,因此它会始终给出相同的结果?查看(例如)libsodium extension docs,我认为每次加密某个人的ID时,我们都必须使用相同的随机数。这似乎非常气馁 使用AES加密时,同样的问题也适用于php openssl_encrypt其中:

  

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

1 个答案:

答案 0 :(得分:0)

  

我们还预计在不久的将来会有更多的外部参与者,我们希望每个人都有不同的唯一ID。 (使用不同的加密密钥)。

+

  

查看(例如)libsodium扩展文档,我认为每次加密一个人的id时我们都必须使用相同的nonce。这似乎非常气馁。

是的,不要担心"键" vs" iv / nonce"部分。只需使用defuse/php-encryptionHalite即可。它们都为您提供经过身份验证的加密,您需要提供的只有messagekey