LINUX.ORG.RU

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

 ,


0

1

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

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

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

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

D = A XOR C

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

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

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

«Решение»:

Нет.

Deleted

Последнее исправление: Deleted (всего исправлений: 11)

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

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

А что значит зациклить?

Значит, прибавлять в хвост B, пока длина не станет больше чем длина A.

Deleted
()

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

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 ★★★★★
()
Ответ на: комментарий от I-Love-Microsoft

Python есть везде (: рукалицо

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

проще взять Python

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

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

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