Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Шифрование данных, Пример кода 
V
    Опции темы
Lence
  Дата 5.8.2006, 17:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чухарадземадзупэ
*


Профиль
Группа: Участник
Сообщений: 209
Регистрация: 9.5.2006
Где: Ташкент

Репутация: 3
Всего: 3



Цитата

А где его взять этот RC4? Может можешь на форум бросить процедурку? 


Пользуюсь вот этим ... 

Код

procedure TMainForm.RC4ButtonClick(Sender: TObject);
var f:file;
    size,i:integer;
    buf:array of byte;
begin
  if OpenDialog.Execute then begin
    MainForm.Cursor:=crHourGlass;
    RC4Init(KeyEdit.Text);
    assignfile(f,OpenDialog.FileName);
    reset(f,1);
    size:=filesize(f);
    ProgressBar.Show;
    ProgressBar.Position:=0;
    ProgressBar.Max:=size;
    reset(f,size);
    setlength(buf,size);
    blockread(f,buf[0],1);
    closefile(f);

    for i:=0 to (size-1) do begin
      buf[i]:=RC4GetCryptoByte(buf[i]); //!!!
      Application.ProcessMessages;
      ProgressBar.StepIt;
    end;

    rewrite(f,size);
    blockwrite(f,buf[0],1);
    closefile(f);
    finalize(buf);
    KeyEdit.Text:='';
    RC4Button.Enabled:=false;
    MD5Label.Caption:='';

    MainForm.Cursor:=crDefault;
  end;
end;

function IntToHexFix(a:LongWord):string;
var b,r:string[8];
begin
  b:=IntToHex(a,8);
  SetLength(r,8);

  r[7]:=b[1];
  r[8]:=b[2];

  r[5]:=b[3];
  r[6]:=b[4];

  r[3]:=b[5];
  r[4]:=b[6];

  r[1]:=b[7];
  r[2]:=b[8];

  Result:=r;
end;


в общем я там снизу прикрутил исходники - посмотрите - разберетесь :-)

здесь в опен диалог выбираете файл для шифрования и в Edit1 пишете пароль ... и все - шифруется - так же и обратно .... 

а вот сама паска - заталкайте ее рядышком ... 

Код

unit crypto;
{---------------------------}
interface

type TArr16xLongword=array [0..15] of Longword;

procedure RC4Init(key:shortstring);
function RC4GetCryptoByte(ch:byte):byte;
procedure MD5Init;
procedure MD5Do(M:TArr16xLongword);
procedure MD5Finalize(var a,b,c,d:Longword);
function ROL(c:Longword;n:byte):Longword;
{---------------------------}
implementation
var rc4i,rc4j:byte;
    rc4s:array[0..255] of byte;

    md5a,md5b,md5c,md5d:Longword;

procedure RC4Init(key:shortstring);
var k:array[0..255] of byte; //вспомогательный массив
    i,j,t:byte;
begin
  //обнуляем глобальные счётчики
  rc4i:=0;
  rc4j:=0;

  //заполняем основной массив линейно
  for i:=0 to 255 do rc4s[i]:=i;

  //заполняем вспомогательный массив ключом
  //при этом он должен заполнить весь массив
  //для этого повторяем его нужное число раз
  j:=0;
  t:=length(key);
  for i:=0 to 255 do begin
    inc(j);
    k[i]:=Byte(key[j]);
    if j=t then j:=0;
  end;

  //заполняем основной массив в зависимости от ключа
  j:=0;
  for i:=0 to 255 do begin
    j:=(j+k[i]+rc4s[i]) mod 256;

    //меняем местами rc4s[i] и rc4s[j]
    t:=rc4s[i];
    rc4s[i]:=rc4s[j];
    rc4s[j]:=t;
  end;
end;
{---------------------------}
function RC4GetCryptoByte(ch:byte):byte;
var t:byte;
begin
  rc4i:=(rc4i+1) mod 256; //циклически увеличиваем счётчик на единицу
  rc4j:=(rc4j+rc4s[rc4i]) mod 256;
  
  //меняем местами rc4s[rc4i] и rc4s[rc4j]
  t:=rc4s[rc4i];
  rc4s[rc4i]:=rc4s[rc4j];
  rc4s[rc4j]:=t;
  
  t:=(rc4s[rc4i]+rc4s[rc4j]) mod 256; //получаем номер байта в массиве для шифрования
  RC4GetCryptoByte:=rc4s[t] xor ch; //получаем шифрованный байт
end;
{---------------------------}
procedure MD5Init;
begin
  md5a:=$67452301;
  md5b:=$efcdab89;
  md5c:=$98badcfe;
  md5d:=$10325476;
end;
{---------------------------}
function ROL(c:Longword;n:byte):Longword;assembler;
asm
 mov eax,c
 mov cl,n
 rol eax,cl
end;
{---------------------------}
procedure MD5Do(M:TArr16xLongword);
var a,b,c,d:Longword;// Временные переменные

procedure FF(var a,b,c,d,m:Longword;s:byte;t:Longword);
begin
  a:=b+(rol((a+((b and c)or((not b) and d))+m+t),s));
end;

procedure GG(var a,b,c,d,m:Longword;s:byte;t:Longword);
begin
  a:=b+(rol((a+((b and d)or(c and (not d)))+m+t),s));
end;

procedure HH(var a,b,c,d,m:Longword;s:byte;t:Longword);
begin
  a:=b+(rol((a+(b xor c xor d)+m+t),s));
end;

procedure II(var a,b,c,d,m:Longword;s:byte;t:Longword);
begin
  a:=b+(rol((a+(c xor (b or(not d)))+m+t),s));
end;

begin //MD5Do
 // копируем во временные переменные
  a:=md5a;
  b:=md5b;
  c:=md5c;
  d:=md5d;

  //Этап 1
  FF(a,b,c,d, M[0], 7,$D76AA478);
  FF(d,a,b,c, M[1],12,$E8C7B756);
  FF(c,d,a,b, M[2],17,$242070DB);
  FF(b,c,d,a, M[3],22,$C1BDCEEE);

  FF(a,b,c,d, M[4], 7,$F57C0FAF);
  FF(d,a,b,c, M[5],12,$4787C62A);
  FF(c,d,a,b, M[6],17,$A8304613);
  FF(b,c,d,a, M[7],22,$FD469501);

  FF(a,b,c,d, M[8], 7,$698098D8);
  FF(d,a,b,c, M[9],12,$8B44F7AF);
  FF(c,d,a,b,M[10],17,$FFFF5BB1);
  FF(b,c,d,a,M[11],22,$895CD7BE);

  FF(a,b,c,d,M[12], 7,$6B901122);
  FF(d,a,b,c,M[13],12,$FD987193);
  FF(c,d,a,b,M[14],17,$A679438E);
  FF(b,c,d,a,M[15],22,$49B40821);

  //Этап 2
  GG(a,b,c,d, M[1], 5,$F61E2562);
  GG(d,a,b,c, M[6], 9,$C040B340);
  GG(c,d,a,b,M[11],14,$265E5A51);
  GG(b,c,d,a, M[0],20,$E9B6C7AA);

  GG(a,b,c,d, M[5], 5,$D62F105D);
  GG(d,a,b,c,M[10], 9,$02441453);
  GG(c,d,a,b,M[15],14,$D8A1E681);
  GG(b,c,d,a, M[4],20,$E7D3FBC8);

  GG(a,b,c,d, M[9], 5,$21E1CDE6);
  GG(d,a,b,c,M[14], 9,$C33707D6);
  GG(c,d,a,b, M[3],14,$F4D50D87);
  GG(b,c,d,a, M[8],20,$455A14ED);

  GG(a,b,c,d,M[13], 5,$A9E3E905);
  GG(d,a,b,c, M[2], 9,$FCEFA3F8);
  GG(c,d,a,b, M[7],14,$676F02D9);
  GG(b,c,d,a,M[12],20,$8D2A4C8A);

  //Этап 3
  HH(a,b,c,d, M[5], 4,$FFFA3942);
  HH(d,a,b,c, M[8],11,$8771F681);
  HH(c,d,a,b,M[11],16,$6D9D6122);
  HH(b,c,d,a,M[14],23,$FDE5380C);

  HH(a,b,c,d, M[1], 4,$A4BEEA44);
  HH(d,a,b,c, M[4],11,$4BDECFA9);
  HH(c,d,a,b, M[7],16,$F6BB4B60);
  HH(b,c,d,a,M[10],23,$BEBFBC70);

  HH(a,b,c,d,M[13], 4,$289B7EC6);
  HH(d,a,b,c, M[0],11,$EAA127FA);
  HH(c,d,a,b, M[3],16,$D4EF3085);
  HH(b,c,d,a, M[6],23,$04881D05);

  HH(a,b,c,d, M[9], 4,$D9D4D039);
  HH(d,a,b,c,M[12],11,$E6DB99E5);
  HH(c,d,a,b,M[15],16,$1FA27CF8);
  HH(b,c,d,a, M[2],23,$C4AC5665);

  //Этап 4
  II(a,b,c,d, M[0], 6,$F4292244);
  II(d,a,b,c, M[7],10,$432AFF97);
  II(c,d,a,b,M[14],15,$AB9423A7);
  II(b,c,d,a, M[5],21,$FC93A039);

  II(a,b,c,d,M[12], 6,$655B59C3);
  II(d,a,b,c, M[3],10,$8F0CCC92);
  II(c,d,a,b,M[10],15,$FFEFF47D);
  II(b,c,d,a, M[1],21,$85845DD1);

  II(a,b,c,d, M[8], 6,$6FA87E4F);
  II(d,a,b,c,M[15],10,$FE2CE6E0);
  II(c,d,a,b, M[6],15,$A3014314);
  II(b,c,d,a,M[13],21,$4E0811A1);

  II(a,b,c,d, M[4], 6,$F7537E82);
  II(d,a,b,c,M[11],10,$BD3AF235);
  II(c,d,a,b, M[2],15,$2AD7D2BB);
  II(b,c,d,a, M[9],21,$EB86D391);

  // увеличиваем значение переменных
  inc(md5a,a);
  inc(md5b,b);
  inc(md5c,c);
  inc(md5d,d);
end;
{---------------------------}
procedure MD5Finalize(var a,b,c,d:Longword);
begin
  a:=md5a;
  b:=md5b;
  c:=md5c;
  d:=md5d;
end;

end.



Присоединённый файл ( Кол-во скачиваний: 30 )
Присоединённый файл  rc4_md5.rar 17,47 Kb
--------------------
Шуруп, забитый молотком, крепче сидит чем гвоздь, закрученный отверткой ....  
PM MAIL ICQ Skype   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0665 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.