To Kilatif:
Решил до конца пройтись по блоуфиш, нашел у тебя несколько различий, ты говарил что пишешь по другие пакеты вот решил уточнить.
Код:
public byte[] Decode(byte[] data)
{
int i, len;
byte[] DBuff = new byte[8];
len = data.Length; - тут в делфи - 2 (вернее мы вызываем декод передавая в длину - 2)
for (i = 0; i < len / 8; i ++)
{
Array.Copy(data, i * 8, DBuff, 0, 8);
DBuff = DecodeBlock(DBuff);
Array.Copy(DBuff, 0, data, i * 8, 8);
}
return data;
}
public byte[] Encode(byte[] data)
{
int i, len;
byte[] DBuff = new byte[8];
len = data.Length; - тут там тоже - 2
for (i = 0; i < len / 8; i++)
{
Array.Copy(data, i * 8, DBuff, 0, 8);
DBuff = EncodeBlock(DBuff);
Array.Copy(DBuff, 0, data, i * 8, 8);
}
return data;
}
Еще тут:
Код:
j = 0;
for (i = 0; i < 18; i++)
{
data = ((Key[j] & 0xFF) << 24) | ((Key[(j+1) % Size] & 0xFF) << 16) | ((Key[(j+2) % Size] & 0xFF) << 8) | (Key[(j+3) % Size] & 0xFF);
PArray[i] = PArray[i] ^ data;
j = (j + 4) % Size;
}
datal = 0;
datar = 0;
for (i = 0; i < 9; i++)
{
Blowfish_encipher(ref datal, ref datar);
PArray[i*2] = datal;
PArray[i*2 + 1] = datar;
}
for (i = 0; i < 4; i++)
for (j = 0; j < 128; j++)
{
Blowfish_encipher(ref datal, ref datar);
SBoxes[i, j*2] = datal;
SBoxes[i, j*2 + 1] = datar;
}
// тот же кусок на делфи
for i:=0 to 17 do begin
data:=((key[j] and $FF)shl 24)or((key[(j+1) mod Size] and $FF)shl 16)or((key[(j+2) mod Size] and $FF)shl 8)or(key[(j+3) mod Size] and $FF);
PArray[i] := PArray[i] xor data ;
j := (j + 4) mod Size ;
end;
datal := 0 ;
datar := 0 ;
for i:=0 to 8 do begin
Blowfish_encipher (datal, datar) ;
PArray[i*2] := datal ;
PArray[i*2 + 1] := datar ;
end;
for i:=0 to 3 do
for j:=0 to 127 do begin
Blowfish_encipher (datal, datar) ;
SBoxes[i,j*2] := datal ;
SBoxes[i,j*2 + 1] := datar ;
end;
Или в делфи нумерация как-то по другому? (всмысле массива)
Добавлено через 2 часа 24 минуты
To Kilatif:
Можно эту функцию: procedure AddCheckSumm(var data: array of byte; len: integer);