Sorry. Komplett sieht das so :
Code:
for (i=0; i<256; i++) {
block->keytable[i] = i;
}
for (i=0; i<256; i++) {
j += key[i % len] + block->keytable[i];
}
block->state = *key;
block->counter=0;
block->sum=0;
Das hatte ich, der Übersicht wegen, weggelassen.
Delphi-Quellcode:
Type
TCrypt_Block = Record
keytable: Array [0 .. 255] of byte;
state: Pbyte; // to key or Hash ?
counter: byte;
sum: byte;
End;
procedure crypt(block: PCrypt_Block; Data: PArray; len: Word; mode: TCrypt_Mode);
Var
i: Integer;
z: byte;
begin
for i := 0 to len - 1 do
begin
Inc(block^.counter);
block^.sum := block^.sum + block^.keytable[block^.counter];
SwapC(block^.keytable[block^.counter], block^.keytable[block^.sum]);
z := Data^[i];
Data^[i] := z xor block^.keytable[(block^.keytable[block^.counter] + block^.keytable[block^.sum]) and $FF] xor block.state^;
if mode = DECRYPT then
z := Data^[i];
block.state^ := block.state^ xor z;
end;
end;
So lässt es sich jetzt compilieren. Bin mir aber mit den ganzen ^ nicht sicher. Pointer
Was macht das für einen Sinn, nur das erste Byte vom Hash zu nehmen ?