Показать сообщение отдельно
Старый 13.02.2012, 13:59   #35
Местный
 
Регистрация: 23.02.2009
Сообщений: 319
Сказал Спасибо: 72
Имеет 60 спасибок в 45 сообщенях
Kilatif пока неопределено
По умолчанию

Цитата:
Сообщение от 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 переводит число в массив именно задом наперед. И то что ява переводит так число в массив действительно беда, но это уже врятли исправишь. Хотя.. Я яву не знаю, так что может просто есть другая функция для этого)
Kilatif вне форума   Ответить с цитированием