У меня есть сервер 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.
Вопрос: это наилучший из возможных подходов или я упускаю что-то очень очевидное?
Вы на самом деле используете secretbox_easy
с Node-натрием, а не secretbox
?
secretbox
требует дополнительных байтов для добавления / удаления. Он доступен только для обратной совместимости, на самом деле его использовать не имеет смысла, кроме как в C, но по какой-то причине Node-Sodium предоставляет его.
Привязки PHP не требуют этих дополнительных байтов. Как и большинство других креплений, secretbox
на самом деле secretbox_easy
под капотом.
Хорошей новостью является то, что Node-Sodium также обеспечивает secretbox_easy
, Вам просто нужно явно назвать это secretbox_easy
, Больше не требуется заполнение.
Других решений пока нет …