Различия в реализации libsodium между PHP и Node.js

У меня есть сервер PHP REST (шлюз). Клиент является сервером node.js. Данные, которыми обмениваются между ними, зашифрованы (crypto_secretbox) & расшифрован (crypto_secretbox_open) с использованием простых PHP-реализаций libsodium & Узел соответственно.

Зашифрованные данные в PHP не имеют 16-байтовых нулей в начале (соль), тогда как зашифрованные данные в node.js имеют 16-байтовые нули.

Чтобы расшифровать на узле данные, зашифрованные в PHP, мне нужно добавить 16 байтов нулей (соль) перед вызовом secretBox.decrypt.

Чтобы расшифровать на PHP данные, зашифрованные в узле, мне нужно сначала удалить 16 байтов нулей перед вызовом \ Sodium \ crypto_secretbox_open.

Вопрос: это наилучший из возможных подходов или я упускаю что-то очень очевидное?

1

Решение

Вы на самом деле используете secretbox_easy с Node-натрием, а не secretbox?

secretbox требует дополнительных байтов для добавления / удаления. Он доступен только для обратной совместимости, на самом деле его использовать не имеет смысла, кроме как в C, но по какой-то причине Node-Sodium предоставляет его.

Привязки PHP не требуют этих дополнительных байтов. Как и большинство других креплений, secretbox на самом деле secretbox_easy под капотом.

Хорошей новостью является то, что Node-Sodium также обеспечивает secretbox_easy, Вам просто нужно явно назвать это secretbox_easy, Больше не требуется заполнение.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]