Есть ли способ безопасно отправить строку из Elixir в PHP? (без SSL)

Я хочу безопасно отправить строку из Elixir/Phoenix(Sever) в PHP(клиент) через строку запроса URL (например: ?secure_string=xxxxx). В средах нет SSL, но они могут заранее использовать закрытый ключ. Поэтому я подумал, что смогу безопасно передать строку с помощью шифрования, такого как AES.

Поскольку PHP имеет openssl_decrypt(), он может расшифровать строку, как показано ниже. Elixir (или Erlang?) может вызывать openssl_encrypt, кроме System.cmd("/usr/bin/openssl")? Есть ли другие (лучшие) способы?

$key = 'private_key_string_shared_both';
$algorithm = 'AES-128-ECB'
$decrypt = openssl_decrypt($encrypt_string, $algorithm, $key);

person hykw    schedule 18.01.2016    source источник


Ответы (1)


Вы можете использовать :crypto приложение. Это приложение Erlang, способное шифровать и расшифровывать с использованием различных шифров.

:crypto.block_decrypt(:aes_ecb, key, data)

И ключ, и данные должны иметь количество байтов, кратное 16. Они могут быть либо двоичными "like this", либо iolists 'like this'. Рабочий пример:

iex(1)> key = List.duplicate(100, 16)
'dddddddddddddddd'
iex(2)> string = List.duplicate(101, 16)
'eeeeeeeeeeeeeeee'
:crypto.block_encrypt(:aes_ecb, key, string)
<<6, 190, 103, 115, 142, 170, 75, 103, 128, 93, 168, 196, 108, 253, 41, 27>>

Пример заполнения двоичных файлов в Erlang

person tkowal    schedule 18.01.2016
comment
Я что-то пропустил? Не совпадает... iex(1)> :crypto.block_encrypt(:aes_ebc, "key", "string") ** (FunctionClauseError) no function clause matching in :crypto.block_encrypt/3 (crypto) crypto.erl:375: :crypto.block_encrypt(:aes_ebc, 'key', "str") - person hykw; 18.01.2016
comment
Могут быть и другие проблемы, но у вас опечатка: это :aes_ecb , а не :aes_ebc . - person pjam; 18.01.2016
comment
@pjam Да, это одно, но даже после исправления опечатки будет другая ошибка ArgumentError, потому что и ключ, и строка должны иметь размер, кратный 16. Я обновил свой ответ, чтобы уточнить это. - person tkowal; 18.01.2016
comment
@tkowal Это сработало!. Однако я не могу декодировать битовую строку в PHP. В любом случае, спасибо. - person hykw; 19.01.2016