Реализация алгоритма шифрования "Кузнечик" - 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++)
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д