• Как шифровать текст в python?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Был такой вредный стрик Керхгофс. И он как-то придумал сет законов касающихся инфо-безопасности. На основе их сегодня работает почти вся криптография. Вкратце основной момент - замена алгорима(ключа) шифрования в любой системе должна быть очень быстрой и легкой. И второй момент - злоумышленник обычно знает систему изнутри. Он знает исходный код. Возможно он - бывший сотрудник.

    Вот исходя из этих принципов и проектируются надежные и безопасные системы. А если автор надеется на то что непопулярный алгоритм шифрования его спасёт - то он сильно ошибается. На этом погорели многие самоуверенные архитекторы. Они тоже надеялись что на незнании можно делать секрет. В принципе вся военная секретная переписка до 20 го века базировалась на предположении что противник не знает. А современная - уже считает что это не главное. А главное - как быстро мы сможем заменить скомпрометированный ключ на новый. И эта замена как раз и есть замена алгоритма. Потому что ключ в крипторгафии и это и есть секретность. А сами алгоритмы вообще ни разу ни секретных. Это кстати - требование. Под сертификацию идут обычно публично известные алгоритмы и их обсуждают. Их анализируют. Их брутфорсят. И только благодаря этому процессу они и являются надежными.
    Ответ написан
    Комментировать
  • Как шифровать текст в python?

    AgentSmith
    @AgentSmith
    Это мой правильный ответ на твой вопрос
    способ расшифровки должен быть непопулярным.

    А вот это уже смешно. Чем тебя не устраивают популярные способы типа RSA?
    Ты, видимо, не слышал о термине Security through obscurity , на котором обожглись многие и ты хочешь повторить их путь
    Ответ написан
    10 комментариев
  • Должны ли все асинхронные методы вызываться с ключом async?

    petermzg
    @petermzg
    Самый лучший программист
    Calculate не является асинхронной функцией поэтому async не нужен. И очень плохо вызывать в асинхронном коде Thread.Sleep, для асинхронного кода есть Task.Delay.

    async преобразует код в конечный автомат (State Machine)
    Ответ написан
    3 комментария
  • Как узнавать время последнего изменения таблицы?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Вопрос интересный. Я-бы спросил - какой смысл должно нести это время? Все простые варианты добавить к таблице счетчик времени - вызывают много вопросов. Начиная от того как быть с delete. И как быть MVCC. Можно просто рассмотреть парочку кейсов где 2 пользователя одновременно вставляют и удаляют строки и еще по разному коммитят и откатывают изменнеия и получается нехилое число парадоксов.

    Аналогия с файловой системой - неуменстна. Файлы - работают в режиме dirty mode. Тоесть сразу фиксируют результат опреации. А таблица в БД в этом смысле похожа на git-репозитарий со множеством бранчей. Тоесть мультиверсионная вселенная. И подытожить ее состояние в любой момент времени так дешево не получиться.

    Для нужд аудита изменений - самое простое создать поле last_update_timestamp в таблиах например. И туда добавлять время бизнес-операции.

    Еще для аудита практически во всех dbms есть опции. Для Oracle например есть audit table.
    Аудит обычно пишет имя пользователя и время действия и время таблицы над которой действие было.
    Для MSSQL тоже есть свой API.
    Ответ написан
    5 комментариев
  • Какой из вариантов ближе по написанию к коммерческому коду?

    GavriKos
    @GavriKos
    Ой, блин, вопрос холиварный шо писец. Что такое коммерческий код? Это как?

    Смотрите. Если рассуждать с т.з. красивости кода - то статики ужас кошмар и уволить.
    Но. Допустим стояла задача от бизнеса "сделать быстро, поддерживать не будем, модуль редкий" (дааа, конечно редко такие прогнозы сбываются, но допустим) - и такая архитектура со статиками (или какая другая) позволяет решить бизнес задачу со всеми вводным - значит это ВНЕЗАПНО коммерческий код.

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

    petermzg
    @petermzg
    Самый лучший программист
    1. Пользователь ввел логин/пароль.
    2. Выдайте ему JWT, только в payload пропишите состояние "No2FA"
    3. Отправьте 6 цифр на почту, сохранив в базе значение.
    4. Отобразите форму получения кода.
    5. Пользователь вводит код, который вы отправляете на эндпоинт вместе с токеном.
    6. Проверили соответствие с БД.
    7. Сгенерили новый токен.

    Так же можно с Cookies и сохранением состояния сессии
    Ответ написан
    2 комментария
  • Почему не получается преобразовать __int128 в BigInteger в своей функции?

    vabka
    @vabka Куратор тега C#
    Токсичный шарпист
    1. Ты берёшь указатель на переменную на стеке, которая после выхода из него уже не факт, что будет иметь то значение, которое тебе нужно.
    2. Тебе нужно выделить память заранее (или в куче) и в эту область памяти уже записывать результат.
    3. Лучше, чтобы память для результата выделялась на стороне C#, чтобы не было проблем с освобождением памяти.
    4. Сишный int не всегда равен шарповому int.
    5. В .NET уже есть структура для Int128, так что тебе не нужно байты перекладывать.

    6.
    public BigInteger (ReadOnlySpan<byte> value, bool isUnsigned = false, bool isBigEndian = false);
    принимает байты от длинного целого. Так что у тебя твой ToBigInteger работает неправильно, если ты в него подаёшь указатель, на __int128

    ptr_fact должно выглядеть как-то так:
    void ptr_fact(int32_t n, __int128* result)
    {
        *result = fact(n);
    }

    [DllImport("Test")] static extern void ptr_fact(int n, out Int128 result);


    Но смысла использовать ptr_fact я не вижу, тк обычный fact ты тоже легко можешь вызывать
    Ответ написан
    3 комментария
  • Почему приложение Hello World занимает 10Мб?

    Stalker_RED
    @Stalker_RED
    Можно до единиц килобайт ужать, если выбросить все по максимуму, включая полезную нагрузку.
    https://habr.com/ru/post/339938/
    Ответ написан
    Комментировать
  • Что возвращает gps модуль neo-6m?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    что возвращается в качестве ответа

    Сообщения формата NMEA.

    Вроде все сообщения из твоего ответа по ссылочке описаны. В частности
    $GPGLL,5547.75949,N,03747.58257,E,155030.00,A,A*64
    55°47.75949' северной широты, 37°47.58257' восточной долготы, зафиксировано в 15:50:30.00.
    Ответ написан
    Комментировать
  • Зачем модификатор public если его можно не использовать?

    Потому что так понятнее какая видимость у переменной. В одних языках по умолчанию все переменные, объявленные без модификатора будут private, в других public, а так всё явно задано и путаница исключена.
    Не исключена вероятность, что при смене версии языка вдруг это поведение изменится и весь код без явного объявления превратится в тыкву.
    Ответ написан
    2 комментария
  • Можно ли написать SQL запрос с выражением в WHERE и в SELECT, но без повторения этого выражения и без вложенного SELECT?

    @alexalexes
    Но будет 2 вычисления MD5

    Выражения в select вычисляются после того, как отобраны строки по условиям в where.
    Если выходная выборка совсем небольшая, то оптимизировать работу функции в колонках не нужно - это экономия на спичках.
    Другое дело, если вы используете вычисляемую функцию в where. Чтобы она быстро работала есть 3 пути:
    1. Если функция вычисляется из данных, которые не зависят от контекста запроса, то нужно отказаться от этой функции, которая вычисляется при каждом запросе. Нужно хранить ее результат в отдельном атрибуте.
    2. Сделать индекс с использованием этой функции на атрибуте, тогда при использовании этой же функции в where сработает индекс.
    3. Если есть возможность, то нужно так преобразовать выражение where, чтобы все аргументы вычисляемой функции или выражения (складываем, вычитаем, умножаем делим, case-им) оказались входными параметрами или константами. Чтобы такое произошло, нужна обратная функция для md5 - reverse_md5. Но такой функции по математическим соображениям не существует.
    Иначе выражение бы выглядело так:
    where value = reverse_md5(:hache)
    Ответ написан
    1 комментарий
  • Можно ли написать SQL запрос с выражением в WHERE и в SELECT, но без повторения этого выражения и без вложенного SELECT?

    iMedved2009
    @iMedved2009
    Не люблю людей
    Standard SQL disallows references to column aliases in a WHERE clause. This restriction is imposed because when the WHERE clause is evaluated, the column value may not yet have been determined.


    https://dev.mysql.com/doc/refman/8.0/en/problems-w...

    Однако у меня сильное подозрение что вряд ли у вас существует функциональный индекс по md5(value) и следовательно у вас sequence scan по таблице - и париться на тему 2 вызовов md5 при таком не стоит.

    З.Ы. А какова причина все время на лету вычислять md5? Почему не воспользоваться виртуальной колонкой к примеру? Если уж мы хотим делать это вычисление именно в бд?
    Ответ написан
    Комментировать
  • Первый раз создаю сайт на русскую аудиторию (таргет - брокерские услуги в Крыму). Есть тут специалисты которые тоже с Крымом работают?

    CityCat4
    @CityCat4
    Внимание! Изменился адрес почты!
    Создавая сайт на русскую аудиторию, следует работать с русскими ресурсами :) Например, Яндекс вместо Гугла ( в рекламе и всем прочим), местные регистраторы доменов etc. Разумеется придется учитывать "особенности национальной сети" :)
    Ответ написан
    2 комментария
  • Общественное достояние и Ютуб. Что делать?

    @CreoLine
    Если вы создаете видео находясь в России, нужно руководствоваться российскими законами независимо от того, где находится хостинг.
    Можно использовать фото, являющиеся общественным достоянием любых стран, но нужно учитывать разницу в законах.
    Чисто теоретически, использование произведения, являющегося общественным достоянием в США, может быть незаконным в России.
    В России, например, произведение может охраняться авторским правом на срок до 70 лет после смерти автора, а в США произведения, опубликованные до 1926 года, как правило, являются общественным достоянием. Следовательно, если произведение находится в общественном достоянии в США, это не обязательно означает, что оно находится в общественном достоянии в России. Вероятность наткнуться на такой случай мала, однако для полной уверенности есть смысл использовать общественное достояние России.
    Ответ написан
    9 комментариев
  • Как решить ошибку Unhandled exception. System.IndexOutOfRangeException: Index was outside the bounds of the array?

    wataru
    @wataru
    Разработчик на С++, экс-олимпиадник.
    Переведите текст ошибки на русский. У вас выход за границу массива. Запустите код в отладчике - он остановится в том месте, где это происходит.

    Возможно файл map.txt лежит не там, программа его не находит и не может его прочитать. Получается пустой массив file, но в функции GetMaxLengthOfLine идет обращение к 0-вому элементу, а его нет.

    Или строки в файле разной длины, тогда при присваивании map[x, y] = file[y][x]; идет выход за границу массива file[y] в не самой длинной строке. Ведь x проходится до длины самой длинной строки.
    Ответ написан
    1 комментарий
  • Как получить имя файла из zip архива, который содержит кириллицу?

    @alexalexes Автор вопроса
    Имя файла, получаемое при работе с модулем ZipArchive, из-за бага в этом модуле требует некоторого преобразования через промежуточные однобайтовые кодировки.
    Нужно провести такую цепочку преобразований:
    UTF-8 -> encode1 -> encode2 (encode3) -> UTF-8
    В php это будет так:
    $out_str = iconv('UTF-8', $encode1.'//IGNORE', $in_str);
    $out_str = iconv($encode1, $encode2.'//IGNORE', $out_str);
    $out_str = iconv($encode3, 'UTF-8//IGNORE', $out_str);

    Но проблема в том, что для каждой конфигурации сервера эти кодировки могут отличаться.
    Чтобы их найти нужно воспользоваться методом перебора.
    Для начала найдем все кодировки, которые поддерживает функция iconv.
    Для этого в консоли сервера вызовем:
    $ iconv -l
    Из набора кодировок нужно взять только те, которые содержат наименование "CPxxx", где xxx - число.
    С помощью скрипта провести полный перебор:
    $all_encoding = []; // сюда вставляем список всех кодировок iconv
    $out_encoding = array_filter($all_encodings, function($item){return strpos(strtolower($item), 'cp') !== false;});
      foreach($out_encoding as $encode1)
      {
        foreach($out_encoding as $encode2)
        {
          foreach($out_encoding as $encode3)
          {
              $str = iconv('UTF-8', $encode1.'//IGNORE', $out);
              $str = iconv($encode1, $encode2.'//IGNORE', $str);
              $str = iconv($encode3, 'UTF-8//IGNORE', $str);
              if($str !== false && $str !== '')
                echo $encode1.'::'.$encode2.'::'.$encode3.'::'.$str.'<br>';
          }
        }
      }

    Визуально ищем тот вариант, где имя файла восстановилось.
    В моем случае это:
    UTF-8 -> cp437 -> cp437 (cp866) -> UTF-8
    В коде это выглядит так:
    $out_str = iconv('UTF8', 'CP437//IGNORE', $in_str);
    $out_str = iconv('CP437', 'CP437//IGNORE', $out_str);
    $out_str = iconv('CP866', 'UTF8//IGNORE', $out_str);
    Ответ написан
    Комментировать
  • Ошибка "Lengh". Что делать?

    i229194964
    @i229194964
    Веб разработчик
    int bankCard = Convert.ToInt32(System.Console.ReadLine());
    if (bankCard.ToString().Length > 16)
        throw new OverflowException("Error3");
    Ответ написан
    3 комментария
  • На этом сайте фото с общественным достоянием?

    vabka
    @vabka
    Токсичный шарпист
    Внизу буквально ссылка про объяснение, что под какой лицензией идёт:
    https://www.ngdc.noaa.gov/ngdcinfo/privacy.html#di...
    То что типа под общественным достоянием - оно не защищено в США, но это не значит, что оно не защищено в другой стране.
    Ответ написан
    7 комментариев
  • Браузер блокирует скачиваение с сайта нескольких файлов подряд. Как предупредить пользователей?

    @alexalexes
    Если следовать логике загрузки файлов из github (получить весь репозиторий) или любого файлового облака (получить весь каталог с файлами), то когда речь заходит о скачивании набора файлов, то этот набор лучше упаковать в архив и отдать клиенту отдельным файлом. Тогда вы не столкнетесь с ограничениями браузера.
    Ответ написан
    2 комментария
  • Как защитить админку?

    rozhnev
    @rozhnev
    Fullstack programmer, DBA, медленно, дорого
    Любая авторизация должна выполнятся на строне сервера, всё что на стороне клиета обходится на раз!
    Как именно - дело Вашею Есть десятки систем авторизациию Имя + пароль - самая распостраненная
    Ответ написан
    1 комментарий