Пытаюсь реализовать шифр "Кузнечика" на Java. Но встала проблема. На С++ есть функция, которую я просто не знаю как реализовать на Java. Ниже представлена моя реализация, но компилятору не нравятся операции с &.
char mul_gf256(char x, char y)
{
char z = 0x0;
while (y)
{
if (y & 0x01)
z ^= x;
x = (x << 0x01) ^ (x & 0x80 ? 0xC3 : 0x00);
y >>= 1;
}
return z;
}
Реализацию на с++ можно глянуть на гитхабе https://github.com/mjosaarinen/kuznechik/blob/master/kuznechik_128bit.c
Компилятору не нравятся побитовые операции с типом сhar
(точнее - в конце, т.к. char
не подходит для данной задачи)
Эквивалентом сишного char
- однобайтового с диапазоном -128..127
в Java будет byte
(в то время как в Java сhar
двухбайтовый 0..65535
)
Вот доведённый до компилируемого состояния код (корректность не проверял).
byte mul_gf256(byte x, byte y)
{
byte z = 0x0, first, second;
while (y!=0)
{
if ((y & 0x01) !=0)
z ^= x;
first = (byte) (x << 1);
if (x < 0)
second = -61;
else
second = 0;
x = (byte) ((first) ^ (second));
y >>= 1;
}
return z;
}
Хотя с char
и можно выполнять арифметические действия, в большинстве случаев при этом тип повышается до int, так что при присвоении результата char
потребуется приведение типа.
char a, b, c;
a = 'A';
a++;
b = (char)(a+1);
c = (char) (a & b);
Виртуальный выделенный сервер (VDS) становится отличным выбором
У меня появилась одна идея и чтобы ее реализовать мне нужна ваша помощьМожно ли в цикле, for, while, do while, не имеет значения, написать код, который...
Решил применить кэширование в своем приложении используя аннотацииПовесил @Cacheable(cacheNames="books") на метод по поднятию списка книг и аннотацию...