LINUX.ORG.RU

Получение двоичного кода файла

 


1

1

Всем доброго времени суток. Хочу написать скрипт на Perl (сразу говорю просто так, ради академического интереса) который будет читать файл, различными образами его криптовать и выводить потом отдельный индивидуальный ключ для его расшифровки. Но обрабатывать я хочу любой файл, а не тока текстовый, так что использовать что то вроде ord (x) и chr (x) не хочу, такое уже есть. Насколько мне ведомо, любой файл - это набор из битов. Вот их я и хочу получить. Чтоб можно было потом превратить в нечитаемый любой файл, хоть TXT, хоть JPG, хоть EXE... Вопрос: как прочитать файл именно в том виде каким его воспринимает процессор? Через binmode? И как потом перекодировать назад? Или считать ту область памяти.ю где он находится и в том состоянии, в котором он там находится. У меня что-то не получается. Подскажите, что можно использовать или может как то вызвать встроенные функции линукса (Хотя приоритет - именно возможностями Perl-а)


Лучше python использовать там есть режим чтения (и записи) байтов из файла.

myfile=open(/home/user/file.bin . 'rb')

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

Вопрос: как прочитать файл именно в том виде каким его воспринимает процессор? Через binmode?

Имеете в виду, в том виде, в котором он записан на диске? Используйте ":raw" PerlIO layer.

Подскажите, что можно использовать или может как то вызвать встроенные функции линукса

В смысле, писать модули на C (и дёргать оттуда syscall'ы)? Погуглите «Perl XS», почитайте man perlapi, посмотрите на Inline::C.

Начните с реализации алгоритма XOR (A xor key = crypted; crypted xor key = A).

А для реального шифрования используйте gpg (например, gpg -c).

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

Алгоритма XOR хватит если его по умному применить. Вот так правильно

myfile=open('/home/user/file.bin' . 'rb')

XoFfiCEr ★★★★ ()
Последнее исправление: XoFfiCEr (всего исправлений: 2)
Ответ на: комментарий от XoFfiCEr

Вариант, но его я тока начинаю изуать а с Perl уже более-менее знаком.... Вот и хотел из него что-нибудь выдепить этакое. Но все равно спасибо.

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

Дело в том что я вчера бездельничая на работе, начал писать скрипт для шифрования. Получалось шифрование в 6 проходов, это вполне достаточно imho.

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

Ну,не особо бездельниать некогда, но вот тут как то.... Просто интересно. Охота именно выудить файл, как «он есть», оббрусфцировать его, присыпать солью..... Не пользоваться тем что уже написано, а состряпать свой «велосипед»..... Пойду опять в гугл, ему много что ведомо..... Я вот файл попробовал обработать

$file2 = unpack («B*», $file);

получил свои долгожданные нолиики-единички, но при обратной процедуре

$file2 = pack («B*», $file);

обломался. Файл в первоначальное состояние возвращаться не хочет.

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

Не используйте pack() на больших значениях. Для сдвига битов напишите код на C, поскольку работа с отдельными битами на Perl (особенно с использованием pack() и unpack()) довольно медленна.

AITap ★★★★★ ()

perl -E '$a=unpack(«b*», «x»); say $a; say pack(«b*», $a)'
perl -E '$c=«a»^«b»; say $c; say $c^«b»; say $c^«a»'
perl -e 'printf «%08b & %08b = %08b\n», 10,1,10&1'

Olegymous ★★ ()
local $/;
open F, '+>./file.dat' or die $!;
binmode F;
my $data = <F>;
# do smth.
print F $data;
close F;

М.б. так?

P.S. Не смог до конца понять что требуется, ибо топик старт написан одним куском.

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

Достаточно операций с байтами imho
Необязательно аж прям к битам обращаться.

XoFfiCEr ★★★★ ()

Как то так вообщем:

d=[]                                                         #предположим что все данные у нас в этом списке
i=0
axor=85
ixor=3
while i<len(d):
    d[i]=d[i]^axor
    axor=axor+ixor
    i+=1
     if axor>255:
        axor=axor-256
Аналогичная ксорка применялась еще в защите кода спектрумовских программ.

XoFfiCEr ★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.