LINUX.ORG.RU
ФорумJob

Написать реализацию Salsa20 на чистом PHP

 ,


0

1

Нужна чистая реализация (не фреймворк, не модуль Pecl и т.д.) алгоритма Salsa20 на PHP. Вот по типу как здесь https://github.com/devi/Salt , только рабочее (или это можно переделать, без разницы).

На любом другом ЯП (петон, перл, Си) реализаций выше крыши, лишь на пехопе ничего нет, как обычно.

Функция должна принимать на вход текст, ключ и nonce (iv), и шифровать-дешифровать. Вида

[code] function salsa20_encrypt($mess,$key,$nonce)… [/code]

Ну это уже такое, главное дабы нормально шифровало / дешифровало строки.

Тебе точно только «шифровать/дешифровать строки», или потом вдруг выяснится, что тебе боевая функция для защиты пользовательских данных? Потому что если второе, то удаляй тред от греха подальше и заказывай биндинги к нормальной реализации.

t184256 ★★★★★
()
Ответ на: комментарий от t184256

боевого не надо. Только чтобы нормально шифровало-дешифровало. Есть реализации на Си и прочее, но не хочу этих костылей , хочу именно нативную похапе-реализацию.

zer0cat
() автор топика
Ответ на: комментарий от zer0cat

Странное желание, с учётом того, что весь твой PHP - тонкая прослойка к сишной либе.

Ну да ладно, хозяин - барин. Если вдруг найдёшь стрелка тебе в ногу, не забудьте оговорить допустимую производительность, (не)устойчивость к side-channel атакам и прочие нефункциональные требования.

t184256 ★★★★★
()

Суть такого поточного шифрования - простая. Переписать с питона на пхп-дело недели, если не спешить и всё с нуля делать. Сел бы, и сам написал бы. Или плати 40 штук.

menangen ★★★★★
()
Ответ на: комментарий от t184256

Мне это все не критично, это не тот случай.. есть прога, которая дешит кое что, но через вызовы внешней проги. Хотелось бы все сделать на РНР, раз уж остальная часть на нем. Никто там не будет ничего ломать или пентестить.

zer0cat
() автор топика
Ответ на: комментарий от menangen

40 многовато. Но вот в первом посте есть какая-то ерунда, но не могу понять, что туда вводить и в каком формате (пробовал и хекс, и бинарное и какое угодно). Неужели никто не кодил реализацию сальсы на РНР? Почему? Почему в каком-то руби или петоне есть что угодно, а в этом пехопе есть такое

\5.3.0 Добавлена поддержка для md2, ripemd256, ripemd320, salsa10, salsa20, snefru256 и sha224

\5.4.0 Убрана поддержка для Salsa10 и Salsa20

zer0cat
() автор топика
Последнее исправление: zer0cat (всего исправлений: 2)
Ответ на: комментарий от zer0cat

не могу понять, как с помощью этого содиума шифровать строку

Ты хочешь

    /**
     * @internal You should not use this directly from another application
     *
     * @param string $message
     * @param string $nonce
     * @param string $key
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function salsa20_xor($message, $nonce, $key)

Но может быть ты не совсем понимаешь, что именно ты хочешь. Может быть тебе надо

    /**
     * Authenticated symmetric-key encryption.
     *
     * Algorithm: XSalsa20-Poly1305
     *
     * @param string $plaintext The message you're encrypting
     * @param string $nonce A Number to be used Once; must be 24 bytes
     * @param string $key Symmetric encryption key
     * @return string           Ciphertext with Poly1305 MAC
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress MixedArgument
     */
    public static function crypto_secretbox($plaintext, $nonce, $key)
    /**
     * Decrypts a message previously encrypted with crypto_secretbox().
     *
     * @param string $ciphertext Ciphertext with Poly1305 MAC
     * @param string $nonce      A Number to be used Once; must be 24 bytes
     * @param string $key        Symmetric encryption key
     * @return string            Original plaintext message
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress MixedArgument
     * @psalm-suppress MixedInferredReturnType
     * @psalm-suppress MixedReturnStatement
     */
    public static function crypto_secretbox_open($ciphertext, $nonce, $key)
no-such-file ★★★★★
()

Ты забыл уточнить сколько платишь за выполнение твоей домашки. Или ты думал тебе бесплатно сделают?) Смешной.

Alve ★★★★★
()

Спасибо всем! Как не странно, получилось выдрать с либсодиума. Всего то нужно было скопировал файл salsa20, и Class ParagonIE_Sodium_Core_Util , убрать содиум эксепшны и зеромемори, и оно работает.

zer0cat
() автор топика
Ответ на: комментарий от zer0cat

Хотя нет, есть 1 проблема. Оно все нормально работает, только не сохраняет состояние IV (nonce).

Т.е. я задаю свой ключ и iv, оно шифрует, и iv сдвигается (в нормальном проекте). Тут же каждый раз при вызове функции salsa20_xor надо снова задавать iv, оно нигде не сохраняется. В оригинале юзается структура вида void ECRYPT_ivsetup( ECRYPT_ctx* ctx, const u8* iv);

ну и т.д.

В общем - кто может это поправить? Требования простые, чтобы шифровало (это уже есть), при инициализации задавать ключ и Noncе, и чтобы это все сохранялось.

По цене - пишите сами, я хз сколько это стоит, ну допустим 100-150 $ могу оплатить.

zer0cat
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.