Реализация алгоритма шифрования "Кузнечик" - 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++)

Оцени полезность:

8   голосов , оценка 4.375 из 5
Похожие ответы