php - PHP 和 Node.js 之间的 libsodium 实现差异

标签 php node.js libsodium

我有一个 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/

相关文章:

libsodium - 使用 crypto_box_easy 加密文件?

java - 如何让 Libsodium 在 Alpine Java 上运行

php - Sodium 未在 XAMPP PHP 7.2 上加载

php - 视频无法上传

php - CakePHP,一键发布到两个 URL

node.js - 如何使用nodejs从密码查询中获取对象?

javascript - Node Express app.get(*) req.url 始终为/favion.ico

PHP 错误解析错误 : syntax error, 在第 7 行的 [location]index.php 中出现意外 '<'

javascript - PHP Javascript - 数组多维错误

node.js - 独立 websocket 服务器出现 Socket.io "Invalid frame header"错误