Тема: Coder / Decoder
Показать сообщение отдельно
  #4  
Старый 13.10.2008, 11:33
darksoftware darksoftware вне форума
Прохожий
 
Регистрация: 03.09.2008
Сообщения: 20
Репутация: 10
По умолчанию

Цитата:
Сообщение от pr0_zu
Реально парни помогите,какие мысли есть?


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

Используй ротацию бит - ROR/ROL, таблицы замен и перестановок, сдвиги SHL / SHR, а если хочешь найти простые и в то же время серьезные примеры - смотри код RTEA или Enrupt на паскале, я портировал с языка C.

Единственное, в коде Enrupt функцию ltotr нужно заменить, см. описание на этом форуме в разделе исходники или качай новую редакцию с моей странички.


Вот простой и эффективный алгоритм (RTEA):

Код:
var key: array [0..7] of longint; // Ключ

// Иначе на inc, dec будет ругаться

{$Q-}

procedure crypt (var a: longint; var b: longint)
var r: longint;
begin

r:=-1;
repeat
 inc(r);
 inc(b,a +((a shl 6) xor (a shr 8))+ (key[r mod 8]+r));
 inc (r);
 inc (a,b+((b shl 6) xor (b shr 8))+ (key[r mod 8]+r));
 until r=63;

end;


procedure decrypt (var a: longint; var b: longint);
var r: longint;
begin
r:=64;
repeat
dec (r);
dec (a,b+((b shl 6) xor (b shr 8))+ (key[r mod 8]+r));
dec(r) ;
dec (b,a+((a shl 6) xor (a shr 8))+ (key[r mod 8]+r));
until r=0;
end;

Как видно, 32 байтовым (256 битным) ключом шифруется за один проход функции два 4 байтовых (32 битных) числа, т.е. блок из 64 бит.
Ответить с цитированием