2

我有一个 PHP REST(网关)服务器。客户端是一个 node.js 服务器。它们之间交换的数据分别使用 PHP 和 Node 的 libsodium easy api 实现加密(crypto_secretbox)和解密(crypto_secretbox_open)。

PHP 中的加密数据在开头(盐)没有 16 个字节的零,而 node.js 中的加密数据有 16 个字节的零。

要在 PHP 中加密的数据节点上解密,我必须在调用 secretBox.decrypt 之前添加 16 个字节的零(盐)。

要在 PHP 上解密节点中加密的数据,我必须先删除 16 个字节的零,然后再调用 \Sodium\crypto_secretbox_open。

问题:这是最好的方法还是我遗漏了一些非常明显的东西?

4

1 回答 1

2

您实际上是在使用secretbox_easyNode-Sodium,而不是secretbox

secretbox需要预先添加/剥离额外的字节。它仅用于向后兼容,在 C 中的 except 中使用它并没有真正意义,但出于某种原因,Node-Sodium 提供了它。

PHP 绑定不需要这些额外的字节。像大多数其他绑定一样,secretbox实际上是secretbox_easy在引擎盖下。

好消息是 Node-Sodium 还提供secretbox_easy. 您只需要显式调用它secretbox_easy。不再需要填充。

于 2016-03-10T08:29:51.073 回答