PHP 和 Node.js 之间的 libsodium 实现差异
libsodium implementation differences between PHP and Node.js
我有一个 PHP REST(网关)服务器。客户端是 node.js 服务器。它们之间交换的数据分别使用 PHP 和 Node 的 libsodium easy api 实现进行加密 (crypto_secretbox) 和解密 (crypto_secretbox_open)。
PHP 中的加密数据在开头(salt)没有 16 个字节的零,而 node.js 中的加密数据有 16 个字节的零。
要在 PHP 中加密的数据节点上解密,我必须在调用 secretBox.decrypt.
之前添加 16 个字节的零(盐)
要解密在节点中加密的数据 PHP,我必须先删除 16 个字节的零,然后再调用 \Sodium\crypto_secretbox_open。
问题:这是最好的方法还是我遗漏了一些非常明显的东西?
您实际上是在将 secretbox_easy
与 Node-Sodium 一起使用,而不是 secretbox
?
secretbox
需要额外字节为 prepended/stripped。它仅用于向后兼容,在 C 语言除外的情况下使用它没有任何意义,但出于某种原因,Node-Sodium 提供了它。
PHP 绑定不需要这些额外的字节。像大多数其他绑定一样,secretbox
实际上是 secretbox_easy
在幕后。
好消息是 Node-Sodium 还提供了 secretbox_easy
。您只需要显式调用它 secretbox_easy
。不再需要填充。
我有一个 PHP REST(网关)服务器。客户端是 node.js 服务器。它们之间交换的数据分别使用 PHP 和 Node 的 libsodium easy api 实现进行加密 (crypto_secretbox) 和解密 (crypto_secretbox_open)。
PHP 中的加密数据在开头(salt)没有 16 个字节的零,而 node.js 中的加密数据有 16 个字节的零。
要在 PHP 中加密的数据节点上解密,我必须在调用 secretBox.decrypt.
之前添加 16 个字节的零(盐)要解密在节点中加密的数据 PHP,我必须先删除 16 个字节的零,然后再调用 \Sodium\crypto_secretbox_open。
问题:这是最好的方法还是我遗漏了一些非常明显的东西?
您实际上是在将 secretbox_easy
与 Node-Sodium 一起使用,而不是 secretbox
?
secretbox
需要额外字节为 prepended/stripped。它仅用于向后兼容,在 C 语言除外的情况下使用它没有任何意义,但出于某种原因,Node-Sodium 提供了它。
PHP 绑定不需要这些额外的字节。像大多数其他绑定一样,secretbox
实际上是 secretbox_easy
在幕后。
好消息是 Node-Sodium 还提供了 secretbox_easy
。您只需要显式调用它 secretbox_easy
。不再需要填充。