我有一个 PHP REST(网关)服务器。客户端是一个node.js 服务器。它们之间交换的数据分别使用 PHP 和 Node 的 libsodium easy api 实现进行加密 (crypto_secretbox) 和解密 (crypto_secretbox_open)。
PHP 中的加密数据开头没有 16 字节零(盐),而 Node.js 中的加密数据有 16 字节零。
要在 PHP 加密数据的 Node 上进行解密,我必须在调用 SecretBox.decrypt 之前添加 16 个字节的零(盐)。
要在 PHP 上解密 Node 中加密的数据,我必须先删除 16 个字节的零,然后再调用\Sodium\crypto_secretbox_open。
问题:这是最好的方法还是我遗漏了一些非常明显的东西?
最佳答案
您实际上是否将 secretbox_easy
与 Node-Sodium 一起使用,而不是 secretbox
?
secretbox
需要添加/删除额外的字节。它仅用于向后兼容,在除了 C 之外的情况下使用它并没有真正的意义,但出于某种原因,Node-Sodium 提供了它。
PHP 绑定(bind)不需要这些额外的字节。与大多数其他绑定(bind)一样,secretbox
实际上是 secretbox_easy
的底层。
好消息是 Node-Sodium 还提供了 secretbox_easy
。您只需明确调用它 secretbox_easy
即可。不再需要填充。
关于php - PHP 和 Node.js 之间的 libsodium 实现差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35833616/