Реализация алгоритма шифрования "Кузнечик" - C#
Формулировка задачи:
Добрый день. Пытаюсь реализовать алгоритм шифрования "Кузнечик" на C#, однако у меня возникли трудности с его нелинейным преобразованием (преобразованием L). Зашифрованный текст не расшифровывается обратно.
Код функций шифрования и расшифрования приведен ниже:
Результат работы первого раунда шифрования и расшифрования кода:
Подскажите пожалуйста, где я допустил ошибку?
static byte KuzMulInGF(byte a, byte b) { byte p = 0; byte counter; byte hi_bit_set; for (counter = 0; counter < 8 && a != 0 && b != 0; counter++) { if ((b & 1) != 0) p ^= a; hi_bit_set = (byte)(a & 0x80); a <<= 1; if (hi_bit_set != 0) a ^= 0xc3; /* x^8 + x^7 + x^6 + x + 1 */ b >>= 1; } return p; } static byte[] LVec = new byte[] {1, 148, 32, 133, 16, 194, 192, 1, 251, 1, 192, 194, 16, 133, 32, 148}; static byte[] KuzR(byte[] input) { byte a_15 = 0; byte[] state = new byte[16]; for (int i = 15; i > 0; i--) { state[i - 1] = input[i]; a_15 ^= KuzMulInGF(input[i], LVec[i]); } state[15] = a_15; return state; } static byte[] KuzL(byte[] input) { byte[] state = input; for (int i = 0; i < 16; i++) { state = KuzR(state); } return state; } static byte[] KuzRReverse(byte[] input) { byte a_0; a_0 = input[15]; byte[] state = new byte[16]; for (int i = 1; i < 16; i++) { state[i] = input[i - 1]; a_0 ^= KuzMulInGF(input[i], LVec[i]); } state[0] = a_0; return state; } static byte[] KuzLReverse(byte[] input) { byte[] state = input; for (int i = 0; i < 16; i++) { state = KuzRReverse(state); } return state; }
Решение задачи: «Реализация алгоритма шифрования "Кузнечик"»
textual
Листинг программы
for (int i = 1; i < 17; i++)
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д