Пишем (де)шифратор на чем-угодно

 

Посмотрите на заголовок. Написать такой криптовщик НА ЧЕМ-УГОДНО, лишь бы оно поддерживало работу с файлами (С, С++, .NET, Delphi, Kylix, Borland C++Builder, Paskal, Visual Basic, Visual C++, QBasic и.т.д.) Итак, алгоритм:

1. Открываем файл для чтения //файл, который требуется зашифровать
2. Открываем файл для записи //тут будет храниться информация в зашифрованном виде
//Вам понадобится переменная типа byte (от 0 до 255)
3. Объявляем  цикл >> пока не конец файла (см.1)
    3.1. Считываем 1 байт
    3.2. Изменяем его в соответствии с ключом
    3.3. Записываем байт в файл (см.2)
    Повторяем цикл
4. Закрываем оба файла


Тут не учитываются ошибки (в таком случае алгоритм был бы на порядок больше). Приведу пример шифрации на Delphi (или Kylix - для Linux):

function lca_crypt(fs,fp,key:string):byte;
var fil,ini:file of byte; b:byte;
begin
    assignfile(fil,fs);
    reset(fil);

    assignfile(ini,fp);
    rewrite(ini);

    while not eof(fil) do begin
        read(fil, b);
        b:=b+sred(key);
//допустим, среднее арифметическое ключа
        write(ini, b);
    end;

    closefile(fil);
    closefile(ini);
end;


В таком случае, дешифровка будет выполнятся следующей функцией:

function lca_decrypt(fs,fp,key:string):byte;
var fil,ini:file of byte; b:byte;
begin
    assignfile(fil,fs);
    reset(fil);

    assignfile(ini,fp);
    rewrite(ini);

    while not eof(fil) do begin
        read(fil, b);
        b:=b-sred(key);
//здесь уже не "+" а "-"
        write(ini, b);
    end;

    closefile(fil);
    closefile(ini);
end;


Поняли, чем шифровка отличается от дешифровки? Если нет, то поясню на примере:

    шифровка: (b + sred(key)) xor 17
    дешифровка: (b xor 17) - sred(key)

Теперь понятно? При дешифровке выполняются действия обратные тем, что выполнялись при шифровке (т.е. "+" сменяется на "-", "-" на "+" и.т.д.), причем выполняются в обратном порядке (при шифровке (b+x)+y, то при дешифровке - (b-y)-x)

На C++Builder будет выглядеть примерно так:

TFileStream *fil = new TFileStream(fs,fmOpenRead);
TFileStream *ini = new TFileStream(fp,fmOpenWrite);
byte b = 0;

while(!eof(fil))
{
    fil->Read(b, 1);
    b=b+sred(key);
    ini->Write(b, 1);
}
delete fil;
delete ini;


Да и (за мелкими изменениями) на С++ точно также.

Найти исполняемые файлы можно тут (для Windows) и тут (для Linux)

НАЗАД

Hosted by uCoz