Цитата:
Сообщение от 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 бит.