Задать вопрос
  • Preimage - атака нахождения прообраза. Теория + практика. Пофантазируем?

    Fernus
    @Fernus Автор вопроса
    Техник - Механик :)
    Как бы банально не звучало: wikipedia всё чётко объясняет :)

    В криптографии, атака нахождения прообраза криптографической хеш-функции — это попытка отыскать сообщение с заданным значением хеша. Существуют два типа подобных атак:

    Атака нахождения первого прообраза: по данному значению хеша h найти такое сообщение m, что hash(m) = h.[1]
    Атака нахождения второго прообраза: по данному сообщению m1 найти отличное от него сообщение m2 такое, что hash(m2) = hash(m1).[1]
    Для идеальной n-битовой хеш-функции сложность нахождения первого прообраза составляет 2n, что считается высоким показателем, учитывая среднюю длину хеш-значений (порядка 160 бит). Если злоумышленник не может провести атаку с меньшими затратами, то такая хеш-функция считается устойчивой к атаке нахождения прообраза.

    Разработанные на сегодняшний момент атаки на прообраз не являются практически пригодными. Если такую атаку возможно будет применить на практике, то это сильно повлияет на многие протоколы сети Интернет. В данном ключе, слово «практический» означает, что атака может быть проведена за разумное время при разумных затратах. Атака по нахождению прообраза, которая стоит миллиарды и занимает десятилетия вычислений, совсем не практична; в то же время атака, на которую уйдёт всего несколько тысяч долларов и несколько недель вычислений, применима на практике.

    Все известные на сегодняшний момент применимые или почти применимые на практике атаки[2][3][4] на MD5 и SHA-1 — это коллизионные атаки, которые легче для проведения[5]. Устойчивость к нахождению прообраза можно свести к устойчивости к коллизиям.



    Ответ написан
    Комментировать
  • Как получить уникальные значения столбцов и их количество?

    Fernus
    @Fernus
    Техник - Механик :)
    SELECT `brand`, `age`, COUNT(*) AS `ALL` 
    FROM `products`
    GROUP BY `brand`, `age`
    /* ORDER BY `ALL` DESC // сортировка по-убыванию кол-ва - раскомментируйте, если понадобится...*/
    Ответ написан
    1 комментарий
  • Вывести заполненность классов, в чем ошибка?

    Fernus
    @Fernus
    Техник - Механик :)
    SELECT `name`, COUNT(`Student_in_class`.*) AS `count`
    LEFT JOIN `Student_in_class` ON `Student_in_class`.`class` = `Class`.`id`
    FROM `Class`
    GROUP BY `Class`.`id`
    ORDER BY `count` DESC
    Ответ написан
    Комментировать
  • Какие технологии использованы для быстрого обмена данными на binance?

    Fernus
    @Fernus
    Техник - Механик :)
    Я так понимаю надо копать в сторону WebSocket?

    Да.

    В консоли разработчика вообще в хроме не видно никакой активности сети.

    Вкладка WS...
    613b9006a3676106921002.png
    Ответ написан
    Комментировать
  • Можно ли и как изменить исходящий запрос в DevTools?

    Fernus
    @Fernus
    Техник - Механик :)
    Как вариант, есть, например, такое расширение для Chrome:

    https://chrome.google.com/webstore/detail/advanced...
    Ответ написан
  • Возможно ли сделать _id по возрастанию в MongoDB?

    Fernus
    @Fernus
    Техник - Механик :)
    Комментировать
  • Ошибка не имея логического объяснения, что это?

    Fernus
    @Fernus
    Техник - Механик :)
    В php.ini есть опция:
    short_open_tag=On

    У Вас скорее всего она установлена в Off...
    Ответ написан
    Комментировать
  • Как заменить все вхождения символа на различные значения не прибегая к циклам?

    Fernus
    @Fernus
    Техник - Механик :)
    <?php
    
    $MASK = '+7(%d%d%d)%d%d%d-%d%d-%d%d';
    $VALUE = '1234145577';
    $arValues = str_split($VALUE, 1);
    
    $RESULT = sprintf($MASK, ...$arValues);
    
    print_r($RESULT); // +7(123)414-55-77
    Ответ написан
    Комментировать
  • SQL запрос как создать 9999 записей с итерацией чисел?

    Fernus
    @Fernus
    Техник - Механик :)
    Что мешает на "клиентской" стороне(средствами самого приложения) сгенерировать SQL ?

    INSERT INTO `table` (`DATE_CREATE`, `DATE_UPDATE`, `ACTIVE`, `USER_ID`, `VALUE`) VALUES
    (NOW(), NOW(), 1, 1, 1),
    (NOW(), NOW(), 1, 1, 2),
    (NOW(), NOW(), 1, 1, 3),
    /*...*/
    (NOW(), NOW(), 1, 1, 9999);


    P.S.:
    По скрину вижу, что Битрикс...можешь в текстовом файле даже составить запрос и выполнить через Админку Битрикса в разделе "SQL-запрос"...если это нужно всего на один раз...
    Ответ написан
    4 комментария
  • Как лучше сделать авторизацию в SPA?

    Fernus
    @Fernus
    Техник - Механик :)
    Какой пуль является best practices для Laravel+Vue?


    Сначала читаем:
    1. Laravel Passport VS JWT
    2. Laravel Sanctum vs Passport

    Потом, думаю, сами ответите на свой же вопрос :)
    Ответ написан
    6 комментариев
  • Возможно ли использовать мощность клиента при работе с веб приложением?

    Fernus
    @Fernus
    Техник - Механик :)
    Возможно ли использовать мощность клиента для работы некоторых функций веб приложения

    Всё, что можешь "доверить" клиенту - то и выполняй на нём...через JS например...

    если да, то как это можно реализовать на языке python?

    Нет. Никак.
    Ответ написан
    Комментировать
  • Почему мой генератор не работает?

    Fernus
    @Fernus
    Техник - Механик :)
    str_replace на preg_replace с доп. параметром заменить...

    $promo_mask = 'XXXX-5555-XXXX-5555';
    $mask_count = substr_count($promo_mask, 'X');
    $promo = $promo_mask;
    
      $chars = '12345ABCDEFGHIJKLMNOPQRSTUVWXYZ67890';
      $hashpromo = '';
      for($ichars = 1; $ichars <= $mask_count; ++$ichars) {
        	$random = str_shuffle($chars);
        	$promo = preg_replace('/X/', $random[$ichars], $promo, 1);
      }
      echo $promo;
    Ответ написан
    Комментировать
  • Как заменить строки в колонке на новые с определенной длиной?

    Fernus
    @Fernus
    Техник - Механик :)
    UPDATE `table` SET `field_code` = SUBSTR(`field_code`, -6, 6) WHERE LENGTH(`field_code`) > 6;


    Перед этим запросом обязательно сделайте бекап, т.к. в случае ошибки - старые данные вернуть не получится...
    Ответ написан
    2 комментария
  • Как реализовать такую обработку CSV?

    Fernus
    @Fernus
    Техник - Механик :)
    Вот вариант, который будет работать при любом порядке категорий...
    Оптимизировать/укоротить код - это уже Вам задание :)

    <?php
    
    $TEST_DATA = 'Продукт 1; Воздуховоды/Прямоугольные/Оцинкованные;
    Продукт 2; Воздуховоды/Прямоугольные/Оцинкованные;
    Продукт 3; Воздуховоды/Прямоугольные/Оцинкованные;
    Продукт 4; Воздуховоды/Круглые/Нержавеющие;
    Продукт 5; Воздуховоды/Круглые/Нержавеющие;
    Продукт 6; Воздуховоды/Круглые/Нержавеющие;';
    
    $TEST_DATA2 = 'Продукт 1; Воздуховоды/Прямоугольные/Оцинкованные;
    Продукт 2; Воздуховоды/Круглые/Нержавеющие;
    Продукт 3; Воздуховоды/Прямоугольные/Оцинкованные;
    Продукт 4; Воздуховоды/Круглые/Нержавеющие;
    Продукт 5; Воздуховоды/Прямоугольные/Оцинкованные;
    Продукт 6; Воздуховоды/Круглые/Нержавеющие;';
    
    $arData = array_map(function($val) {
        return array_filter(array_map('trim', explode(';', $val)));
    }, preg_split('#[\r\n]#isu', $TEST_DATA, -1, PREG_SPLIT_NO_EMPTY));
    
    /* Всё, что выше - к задаче не относится...имитация получения данных из CSV... */
    
    $arRes = [];
    
    foreach($arData as $data) {
        
        $arCategories = array_filter(array_map('trim', explode('/', $data[1])));
        
        $MAIN_CATEGORY = array_shift($arCategories);
        
        $HASH = md5(implode('/', $arCategories));
        
        $arRes[$MAIN_CATEGORY][$HASH][] = [
                'product_name' => $data[0],
                'category' => $data[1],
                'category_items' => $arCategories
            ];
        
    }
    
    $HASH = false;
    
    foreach($arRes as $main_category => $arSubCategories) {
        
        echo $main_category."\r\n";
        
        foreach($arSubCategories as $h => $arItems)
            foreach($arItems as $item) {
                
                if($HASH != $h) {
                    
                    $HASH = $h;
                    
                    foreach($item['category_items'] as $k => $category) {
                    
                        $k++;
                            
                        echo str_repeat('!', $k).$category."\r\n";
                    
                    }
                    
                }
                
                echo $item['product_name'].';'.$item['category'].';'."\r\n";
                
            }
        
    }
    
    /* RESULT:
    
    Воздуховоды
    !Прямоугольные
    !!Оцинкованные
    Продукт 1;Воздуховоды/Прямоугольные/Оцинкованные;
    Продукт 2;Воздуховоды/Прямоугольные/Оцинкованные;
    Продукт 3;Воздуховоды/Прямоугольные/Оцинкованные;
    !Круглые
    !!Нержавеющие
    Продукт 4;Воздуховоды/Круглые/Нержавеющие;
    Продукт 5;Воздуховоды/Круглые/Нержавеющие;
    Продукт 6;Воздуховоды/Круглые/Нержавеющие;
    
    */


    UPD:
    Вариант с одним циклом с учётом того, что категории уже отсортированы:
    <?php
    
    $TEST_DATA = 'Продукт 1; Воздуховоды/Прямоугольные/Оцинкованные;
    Продукт 2; Воздуховоды/Прямоугольные/Оцинкованные;
    Продукт 3; Воздуховоды/Прямоугольные/Оцинкованные;
    Продукт 4; Воздуховоды/Круглые/Нержавеющие;
    Продукт 5; Воздуховоды/Круглые/Нержавеющие;
    Продукт 6; Воздуховоды/Круглые/Нержавеющие;';
    
    $arData = array_map(function($val) {
        return array_filter(array_map('trim', explode(';', $val)));
    }, preg_split('#[\r\n]#isu', $TEST_DATA, -1, PREG_SPLIT_NO_EMPTY));
    
    /* Всё, что выше - к задаче не относится...имитация получения данных из CSV... */
    
    $VAR = false;
    $VAR2 = false;
    
    foreach($arData as $data) {
        
        $arCategories = array_filter(array_map('trim', explode('/', $data[1])));
            
        $MAIN_CATEGORY = array_shift($arCategories);
        
        if($VAR !== $MAIN_CATEGORY) {
            
            $VAR = $MAIN_CATEGORY;
            
            echo $MAIN_CATEGORY."\r\n";
            
        }
        
        $CATEGORIES = implode('/', $arCategories);
        
        if($VAR2 !== $CATEGORIES) {
            
            foreach($arCategories as $k => $category) {
                    
                $k++;
                    
                echo str_repeat('!', $k).$category."\r\n";
                    
            }
            
            $VAR2 = $CATEGORIES;
            
        }
        
        echo $data[0].';'.$data[1].';'."\r\n";
    
    }
    
    /* RESULT:
    
    Воздуховоды
    !Прямоугольные
    !!Оцинкованные
    Продукт 1;Воздуховоды/Прямоугольные/Оцинкованные;
    Продукт 2;Воздуховоды/Прямоугольные/Оцинкованные;
    Продукт 3;Воздуховоды/Прямоугольные/Оцинкованные;
    !Круглые
    !!Нержавеющие
    Продукт 4;Воздуховоды/Круглые/Нержавеющие;
    Продукт 5;Воздуховоды/Круглые/Нержавеющие;
    Продукт 6;Воздуховоды/Круглые/Нержавеющие;
    
    */
    Ответ написан
  • Почему внутри handle() Job доступен Auth::user(), а Request - недоступен?

    Fernus
    @Fernus
    Техник - Механик :)
    И да, я использую 'sync' (для тестирования) - может поэтому Auth::user() доступен?

    Да.

    Вообще, может посоветует кто:

    - Я использую для хранения и передачи некоторых данных - сессии.

    Но внутри Job - Request, а, значит, и сессии - недоступны.

    Переписывать логику без сессий - неохота :D

    Или по любому придется, если я хочу использовать Jobs?


    По-любому.
    Ответ написан
    Комментировать
  • Как отсортировать строчку состоящую из цифр с разделителем?

    Fernus
    @Fernus
    Техник - Механик :)
    Чёт не понял...так не канает?

    <?php
    
    $ar = [
        '10/22/300',
        '10/21/300',
        '9/5/5/6'
        ];
    
    natsort($ar);
    
    print_r($ar);
    
    /* RESULT
    
    Array
    (
        [2] => 9/5/5/6
        [1] => 10/21/300
        [0] => 10/22/300
    )
    
    */
    Ответ написан
    2 комментария
  • Как правильно проверять находится ли пост в закладках пользователя?

    Fernus
    @Fernus
    Техник - Механик :)
    В модели постов нужно добавить отношение с привязкой к юзерам, которые их добавили...в моём коде это bookmark_users...

    <?php
    
    $CURRENT_USER_ID = \Auth::user()->id;
    
    $posts = Post::with([
        'bookmark_users' => function($q) use($CURRENT_USER_ID) {
                $q->where('id', $CURRENT_USER_ID);
            }
        ])
        ->get();
    
    foreach ($posts as $item) {
        
        if($item->bookmark_users->count() > 0) {
            
            // Удалить
            
        }else{
            
            // Добавить
            
        }
        
    }
    Ответ написан
    2 комментария
  • API прочитать большой JSON файл?

    Fernus
    @Fernus
    Техник - Механик :)
    Если скачать файл и "положить" локально на сервер, то file_get_contents 99.9% справится с этой задачей...

    Тогда, как вариант:

    1. На крон вешаем команду wget, например, раз в сутки или сколько там Вам надо:
    wget -P /save/to/folder/file.json http://site.ru/file.json

    2. Далее по Вашей текущей схеме через file_get_contents, но с файлом сохранённым локально на сервере...
    Ответ написан
  • Ресайз большого количества изображений в Bitrix?

    Fernus
    @Fernus
    Техник - Механик :)
    Как такой вариант?

    Я бы сделал как по ссылке...давно подобной схемой пользовался...
    Ответ написан
    Комментировать