2016-03-06 2 views
0

У меня есть сервер REST (Gateway) PHP. Клиент является сервером node.js. Обмен данными между ними осуществляется зашифрованным (crypto_secretbox) & дешифрованным (crypto_secretbox_open) с использованием libsodium easy api реализаций PHP & Узел соответственно.различия между реализациями libsodium между PHP и Node.js

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

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

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

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

+0

Непонятно, каков ваш вопрос. Вы ясно нашли решение различий в обеих реализациях? – shrmn

+0

Привет. Я сделал, но я чувствую, что это взломать. Я надеюсь, что кто-то скажет мне, что «так вы делаете это, вы рубите!» :) – indiangolfer

ответ

0

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

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

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

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

+0

Спасибо. Я попробую и дам вам знать. – indiangolfer

+0

Привет, Франк. Я просмотрел весь код в https://github.com/paixaop/node-sodium и в моем node_modules/натрия. Я не могу найти API, который я могу вызвать, чтобы передать только секретное шифрование, отличное от секретного. Остальным из них нужна пара открытого/закрытого ключа. Мое шифрование/дешифрование основано на секретном ключе, а не на общедоступном/закрытом ключе. Пожалуйста, порекомендуйте. – indiangolfer

+0

Кроме того, реализация узла натрия при использовании crypto_secretbox и crypto_secretbox_open ограничивает SecretKey быть 32 байт длиной, основанные на коде в ./node_modules/sodium/deps/libsodium/src/libsodium/crypto_stream/salsa20/ref/xor_salsa20_ref.c Реализация PHP не имеет такого ограничения. – indiangolfer