CRC32 - контрольная сумма для файла или для строки

5 (1)
  • Развернуть CRC32 - контрольная сумма для файла или для строки ( KaMPiLeR  15.04.2015 13:33 )
    5(1)
    В последнее время стали пугать вирусом для арм-кбр, который ищет файлы-отправки рейсов и заменяет реквизиты получателей платежей.
    вот и задумались чтоб при печати реестра платежей печаталась контрольная сумма файла XML.

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

    а вирус или человек это был - но в конце прошлого года один московский банк попал на 200млн.
    http://bankir.ru/dom/threads/73797-quot-%D0%9E%D1%81%D0%BE%D0%B1%D0%B5%D0%BD%D0%BD%D0%BE%D1%81%D1%82%D0%B8-quot-%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%8B-%D0%9C%D0%A6%D0%98/page100?p=3201296&viewfull=1#post3201296
    >> Ответить
    • Развернуть эт я к тому что на похапе или на дельфях я найду CRC32, а на RSL это реализовывать чот не охота ( KaMPiLeR  15.04.2015 13:36 )
      5(1)
      знаю что в operlog пишут контрольную сумму - если по такому же алгоритму как и везде - то как этой функцией воспользоваться.
      или мож кто реализовал на RSL уже
      >> Ответить
      • Развернуть нашел на дельфях - в несколько строк ( KaMPiLeR  15.04.2015 14:24 )
        5(1)
        http://www.delphisources.ru/pages/faq/base/fast_crc32.html

        скомпилил запустил - с похапе совпадает.


        >> Ответить
        • Развернуть Аналогично на Java ( fplab  16.04.2015 09:15 )
          5(1)
          Целых три варианта - на любой вкус

          http://introcs.cs.princeton.edu/java/51data/CRC32.java.html

          Думаю, можно переписать и на RSL. Правда, во всех вариантах нужны битовые операции, но если в RSL-макросе прописать

          VAR js = ActiveX ("MSScriptControl.ScriptControl");    // JavaScript
          
          то можно будет дергать нужные операции:
          MSGBOX (js.eval (a + "&" + b);
          

          >> Ответить
          • Развернуть Битовые операции в RSL ( Шкурко Владимир  16.04.2015 13:38 )
            5(1)
            В RSL есть встроенные битовые операции (начиная с версии 7.16.1139), а также поддержка типа bigint (с версии 7.16.1149).
            >> Ответить
            • Развернуть Что это за версия? ( sokols  16.04.2015 15:57 )
              5(1)
              Выполняю макрос
              [############] (Version());
              выдаёт версию в другом формате:
              1151
              Как они соотносятся?
              >> Ответить
            • Развернуть Скачал свежую документацию по РСЛ (+) ( sokols  16.04.2015 16:15 )
              5(1)
              Ни про XOR, ни про bigint ничего там не нашёл
              >> Ответить
              • Развернуть Возможны накладки ( Шкурко Владимир  16.04.2015 16:21 )
                5(1)
                AndBits(V_INTEGER v1, V_INTEGER v2):V_INTEGER
                Побитовое И (результат равен v1 & v2)
                Пример:
                PrintLn(AndBits(715827882, 2457));
                Выводит:
                2184

                OrBits(V_INTEGER v1, V_INTEGER v2):V_INTEGER
                Побитовое ИЛИ (результат равен v1 | v2)
                Пример:
                PrintLn(OrBits(715827882, 2457));
                Выводит:
                715828155

                NotBits(V_INTEGER v):V_INTEGER
                Побитовое НЕ (результат равен ~v1)
                Пример:
                PrintLn(NotBits(715827882));
                Выводит:
                -715827883

                XorBits(V_INTEGER v1, V_INTEGER v2):V_INTEGER
                Побитовое исключающее ИЛИ (результат равен v1 ^ v2)
                Пример:
                PrintLn(XorBits(715827882, 2457));
                Выводит:
                715825971

                ShiftBits(V_INTEGER v1, V_INTEGER v2):V_INTEGER
                Арифметический сдвиг влево (умножение)/вправо (деление). Величина сдвига определяется параметром v2, направление сдвига - его знаком (если v2 больше или равно 0, то сдвиг выполняется влево (умножение), если меньше 0, сдвиг выполняется вправо (деление)).
                Пример:
                PrintLn(ShiftBits(715827882, 3));
                Выводит:
                1431655760

                PrintLn(ShiftBits(715827882, -7));
                Выводит:
                5592405

                Если фактические типы аргументов не соответствуют формальным, процедуры возвращают значение 0 с типом V_INTEGER.
                >> Ответить
    • Развернуть Мне кажется это ловля блох там где их нет. ( LeonL  16.04.2015 09:49 )
      5(1)
      Если бабки угнали то это помог кто-то внутри. Без этого в россии ничего не происходит.

      И толку в CRC будет ноль, если это вирус то он садится поверх КБР, и срабатывает после того как КБР заглотил посылку и CRC считать уже не у кого, так как ее съел КБР. А то что вы получите на его выходе уже зашифровано и никак не посмотришь.

      >> Ответить