Цитата:
Сообщение от Tin-moon
Код:
private long S(long x, byte i)
{
byte[] bts = new byte[4];
bts = BitConverter.GetBytes(x);
return SBoxes[i, bts[3-i]];
}
Вот тут такая последовательность. Понимаешь тут смысл в чем, оно выбирает из bts числа (которые там получились) bts[3-i] - это число {3, 169, 95, 79, 0, 0, 0, 0}. И в массиве SBoxes выбирает число. Понятное дело что оно не может быть отрицательным. Ща попробую запилить в яве не в байт а в short и глянуть какие данные будут.
Кстати, чисто для сверки, выкинь полученные Parray и SBoxes из BlowFish.Init(key), ключ тоже подсунь.
|
для bts[3-i], 3-i - никогда и не будет отрицательным, потому что в моем классе значение i > 3 нигде не используется.
Что касается записи числа в массив.
Вообще, в процессорах Intel используется обратная запись числа, поэтому в пакетах тебе приходит массив с числами, которые записаны задом наперед. И видимо поэтому C# и Delphi переводит число в массив именно задом наперед. И то что ява переводит так число в массив действительно беда, но это уже врятли исправишь. Хотя.. Я яву не знаю, так что может просто есть другая функция для этого)