Делаю шифрование с помощью сдвигов битов в байте.Но если байту присвоить значение больше 127, оно начинает терять данные.Как правильно перевести большое число в байты без потери данных или чтобы его можно было потом восстановить?
В Java нет беззнаковых типов, но если вы хотите - можете сымитировать беззнаковый байт uint8 (хранит значения 0...255), вычитая 256 из чисел больше 127. Так вы будите использовать отрицательную область -128...-1.
Обратное преобразование int b = Byte.toUnsignedInt(a);
Это будет работать для чисел до 255. Больше чем 256 значений в один байт положить не получиться.
Чтобы перевести в байты числа больших размеров берите байты от типов short - 2 байта, int - 4 байта, или long - 8 байт. Отдельные байты можно получить методом битового сдвига.
Думаю для этих целей можно использовать BigInteger. Не думаю, что это оптимальный метод. В java вроде был api для шифрования и есть сторонние библиотеки. BigInteger можно перевести в массив байта путем вызова toByteArray(). Если есть знания английского или гугл переводчика https://docs.oracle.com/javase/7/docs/api/java/math/BigInteger.html В дополнение комментария о сдвигах. В стандартной библиотеке нет циклических сдвигов для Byte. Но можно их реализовать на примере сдвигов для Integer из openjdk. rotateLeft и rotateRight методы.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости