LINUX.ORG.RU

Побитовый XOR двух файлов

 ,


0

1

Есть два файла разной длины: A и B.

Задача: Зациклить и обрезать второй файл по длине первого:

C = truncate(loop(B,>len(A)),len(A))

После, произвести побитовый XOR двух файлов:

D = A XOR C

Что то подсказывает, что это можно произвести стандартными (входящими в официальные репозитории) утилитами. Но как?

PS: Уточню вопрос: есть стандартные утилиты производящие битовые операции с файлами?

«Велосипеды»:

«Решение»:

Нет.

Deleted

А в чем смысл тогда? Если гамма повторяется, то изначальные данные можно восстановить.

anonymous ()

Если отрежешь более длинный будут коллизии же. Не вернее ли будет добивать нулями короткий до длины второго?

deep-purple ★★★★★ ()
Последнее исправление: deep-purple (всего исправлений: 1)
Ответ на: комментарий от deep-purple

Если отрежешь более длинный будут коллизии же.

Неважно. Действие то простое. Как сделать?

Deleted ()
Ответ на: комментарий от deadNightTiger

Проще - это взять си? :)

Здесь уже python/perl предлагали. Что показалось мне избыточным. А си, можно и на си. Но действие то простое. Напишешь, не пройдет и нескольких дней - бац, ненужный никому велосипед.

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

лазарус, однозначно и воимя луны

как сейчас помню на борлданде баянил сей моноколес. спросите нафейхуа, ну надо было чем-то время убить

anonymous ()
Ответ на: комментарий от deep-purple

Не вернее ли будет добивать нулями короткий до длины второго?

Нет, ибо A xor 0 == A.

anonymous ()

Если нужно написать велосипед, значит его кто-то уже написал. На гитхабе по поиску xor files результаты есть.

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

На гитхабе по поиску xor files результаты есть.

Логично. Но интересует применение стандартных тулз. Должно быть что-то?

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

Но интересует применение стандартных тулз.

#define «стандартные тулзы»

anonymous ()
Ответ на: комментарий от Deleted

Зайдем с другой стороны, знания языков имеются?

Можно искать/разбираться с sed или awk и писать/гуглить баш скрипт. Но это текстовые утилиты, соответсвенно, детали...

На любом ЯП лучше тем, что не беспокоишься что за файлы и кодировки. Выбор языка дольше чем скопировать хоть что и проверить.

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

На любом ЯП лучше тем, что не беспокоишься что за файлы и кодировки.

Согласен. В «тему» уже внёс пару «велосипедов», но интересуют стандартные тулзы, или хотя бы, есть такие или нет?

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

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

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

Надо придумать хороший синоним к слову «зациклить». И искать утилиту которая так делает для начала видимо. Ибо xor и зациклить, да ещё и в одной тулзе готовой - очень экзотичненько, либо это какой-то очень распространённый примитив.

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

Ибо xor и зациклить, да ещё и в одной тулзе готовой - очень экзотичненько

См. «тему». «Велосипеды» есть.

Deleted ()
Ответ на: комментарий от pon4ik

чем тебе не подходит утилита onetime.

Не совсем понятно что она делает. Плюс:

$ onetime -e -p xoror LICENSE 
Traceback (most recent call last):
  File "/usr/bin/onetime", line 732, in <module>
    main()
  File "/usr/bin/onetime", line 683, in main
    result = encoder.encode(str)
  File "/usr/bin/onetime", line 145, in encode
    return self._output(self.compressor.compress(self.pad.convert(str)))
  File "/usr/bin/onetime", line 84, in convert
    result = result + chr(ord(str[i]) ^ ord(pad_str[i]))
IndexError: string index out of range
Deleted ()
Ответ на: комментарий от Kokonavtuz

Что значит стандартные? Их много людей использует?

Входящие в официальные репозитории.

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

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

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

Вопрос - зачем? С точки зрения криптографии нужно взять от B хэш и использовать как ключ для полноценного блочного шифрования A. Предложенная схема для этого никак не годится из-за ограниченности и предсказуемости гаммы.

slovazap ★★★★★ ()
Последнее исправление: slovazap (всего исправлений: 1)

Взять двоичное представление каждого файла (поблочно), а потом четыре if-а, или немного оптимизируя:

...
if[[ $(($x - $y)) -eq 0]] ; then z=0; else z=1; fi;

далее z записывается в блок на запись, а блок уже записывается в файл

anonymous ()
Ответ на: комментарий от slovazap

с точки зрения криптографии, у ТС - шифроблокнот, при достаточно большом размере блокнота, результат идеально стоек

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

с точки зрения криптографии, у ТС - шифроблокнот, при достаточно большом размере блокнота, результат идеально стоек

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

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

файл можно сгенерировать через /dev/random, если нужна теоретическая стойкость или взять tar.gz от какого-нибудь видеофайла, если достаточно практической

гамма не повторялась

если достаточно редко повторяется (длиннее шифруемого текста), то против однократных атак сойдёт

anonymous ()
Ответ на: комментарий от slovazap

На простых файлах всё это очень сильно не выполняется.

Не совсем то. Нудно, чтобы после encrypt полученного файла достойными утилитами, дешифратор находил последовательности файла B, а не A.

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

а вот теперь абсолютно стало непонятно, чего вы хотите

anonymous ()

Вот реально проще взять Python и не зависеть от прихоти других разработчиков, что они там сделали или не сделали.

Эти «стандартные утилиты» что-то будет запускать? Не само же оно вдруг станет считать XORы внезапно. Там будет некий твой софт все равно. Python есть везде, и этот скрипт может стать частью твоей задумки.

I-Love-Microsoft ★★★★★ ()
26 декабря 2019 г.
Ответ на: комментарий от I-Love-Microsoft

проще взять Python

Нет. У нас пол-CI теперь (после такого неверного решения) - это чекание разных актуальных питоньих версий, наборы requirements файлов под разные дистры, постоянные починки появившихся deprecated варнингов и коммиты с тикетами в апстримы нескольких либ с бек- и форвард- портами свежих их версий.

Короче, это худшее, что могло произойти с проектом два года назад. А задача была совсем не основная - обвязочные скрипты для автоматизации работы с SDK. Надо было закалить яйца и делать всё на posix shell, всё-таки. (На самом деле, вопрос открытый, но питон явно показал свое неприглядное нутро, на деле)

zendrz ★★ ()
Последнее исправление: zendrz (всего исправлений: 2)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.