• Почему в Android Java и PHP HMAC SHA 256 разные результаты?

    neuotq
    @neuotq
    Прокрастинация
    Если верить Стэковерфлоу, разница в обработчике строк на Андроиде в Джаве есть, чтобы работала так же как на декстопе нужно добавить ключ Base64.NO_WRAP
    Base64.encode("foobar".getBytes(), Base64.NO_WRAP);
    Ответ написан
    Комментировать
  • Какой универсальный метод шифрования использовать для передачи строки от клиента к серверу?

    NeLexa
    @NeLexa
    PS. На данный момент вижу только openssl encrypt/decrypt.

    Вот openssl и используйте.
    Выбираете алгоритм шифрования, например, AES-256-CBC и гуглите по каждому конкретному языку, как шифровать и дешифровать строку/массив байт.

    Вот я отвечал на подобный вопрос: Можно ли передавать по сети OpenSSL encrypt/decrype?
    Ответ написан
    Комментировать
  • Можно ли передавать по сети OpenSSL encrypt/decrype?

    NeLexa
    @NeLexa
    Можно ли передавать по сети OpenSSL encrypt/decrype?

    Конечно можете. Главное, чтобы совпадал пароль и IV.
    Для блочного шифрования обычно используют AES-256-CBC.
    Если планируется использовать всегда разные пароли, можно продумать схему обмена ключами клиента с сервером по алгоритму Диффи-Хеллмена и на их основе создавать пароль и IV по определённому алгоритму.

    К примеру в телеграм используется следующий алгоритм для генерации ключа и вектора:
    // псевдокод
    x = 0 for messages from client to server 
    // or
    x = 8 for those from server to client.
    
    data = данные для шифрования или расшифрования
    auth_key = ключ аутенификации 256 байт (зашить в клиент и сервер или получать при обмене ключами при помощи DH)
    msg_key = substr(SHA1(data), 0, 16)
    
    sha1_a = SHA1 (msg_key + substr (auth_key, x, 32));
    sha1_b = SHA1 (substr (auth_key, 32+x, 16) + msg_key + substr (auth_key, 48+x, 16));
    sha1_с = SHA1 (substr (auth_key, 64+x, 32) + msg_key);
    sha1_d = SHA1 (msg_key + substr (auth_key, 96+x, 32));
    aes_key = substr (sha1_a, 0, 8) + substr (sha1_b, 8, 12) + substr (sha1_c, 4, 12);
    aes_iv = substr (sha1_a, 8, 12) + substr (sha1_b, 0, 8) + substr (sha1_c, 16, 4) + substr (sha1_d, 0, 8);

    Для защиты от MITM, в случае обмена ключами, в клиент и сервер можно зашить свой сертификат и отвергать запросы не подписанные им.

    Сомнения вызывает ф-ия openssl encrypt/decrypt - они кодируют/раскодируют только на основе соли или ещё каких-то данных свойственных железу напр? :)

    Нет, всё чётко. Это же не random.
    Ответ написан
    Комментировать
  • Как расшифровать https?

    Можно, либо получаете доступ к инфраструктуре сервиса и ковыряете трафик еще до отправки клиенту, либо ставите на клиента поддельный корневой сертификат, и можете пускать трафик через себя. Посмотрите как делает Fiddler на локальной машине, чтобы перехватывать HTTPS трафик. Если вы сможете установить липовый сертификат, то сможете и перешифровывать на middle-стороне трафик, создавая иллюзию нормального HTTPS соединения.
    Ответ написан
    Комментировать
  • Как перенаправить HTTP на HTTPS при следующих условиях?

    BuriK666
    @BuriK666
    Компьютерный псих
    RewriteEngine on
    
    RewriteCond %{HTTPS} off
    RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
    
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule . index.php [L]
    Ответ написан
    1 комментарий
  • Какие есть инструменты для разработки мастера установки (install wizard) для готового laravel проекта?

    muhammad_97
    @muhammad_97
    PHP-разработчик
    1. -
    2. Если вы делаете коробочный продукт, то врядли имее смысл использовать Composer, будет лучше сохранить папку vendor в архив, как это сделано у October.
    3. Тоже можно взять у October. На гитхабе есть репозиторий с Config Rewriter'ом
    4. Гуглите Artisan::call

    Реализовал на основе их инсталлятора, правда пришлось многое править, но общее направление становится понятным
    Ответ написан
    1 комментарий