Реализация алгоритма шифрования "Кузнечик" - C#

Узнай цену своей работы

Формулировка задачи:

Добрый день. Пытаюсь реализовать алгоритм шифрования "Кузнечик" на C#, однако у меня возникли трудности с его нелинейным преобразованием (преобразованием L). Зашифрованный текст не расшифровывается обратно. Код функций шифрования и расшифрования приведен ниже:
Листинг программы
  1. static byte KuzMulInGF(byte a, byte b)
  2. {
  3. byte p = 0;
  4. byte counter;
  5. byte hi_bit_set;
  6. for (counter = 0; counter < 8 && a != 0 && b != 0; counter++)
  7. {
  8. if ((b & 1) != 0)
  9. p ^= a;
  10. hi_bit_set = (byte)(a & 0x80);
  11. a <<= 1;
  12. if (hi_bit_set != 0)
  13. a ^= 0xc3; /* x^8 + x^7 + x^6 + x + 1 */
  14. b >>= 1;
  15. }
  16. return p;
  17. }
  18. static byte[] LVec = new byte[]
  19. {1, 148, 32, 133, 16, 194, 192, 1,
  20. 251, 1, 192, 194, 16, 133, 32, 148};
  21. static byte[] KuzR(byte[] input)
  22. {
  23. byte a_15 = 0;
  24. byte[] state = new byte[16];
  25. for (int i = 15; i > 0; i--)
  26. {
  27. state[i - 1] = input[i];
  28. a_15 ^= KuzMulInGF(input[i], LVec[i]);
  29. }
  30. state[15] = a_15;
  31. return state;
  32. }
  33. static byte[] KuzL(byte[] input)
  34. {
  35. byte[] state = input;
  36. for (int i = 0; i < 16; i++)
  37. {
  38. state = KuzR(state);
  39. }
  40. return state;
  41. }
  42. static byte[] KuzRReverse(byte[] input)
  43. {
  44. byte a_0;
  45. a_0 = input[15];
  46. byte[] state = new byte[16];
  47. for (int i = 1; i < 16; i++)
  48. {
  49. state[i] = input[i - 1];
  50. a_0 ^= KuzMulInGF(input[i], LVec[i]);
  51. }
  52. state[0] = a_0;
  53. return state;
  54. }
  55. static byte[] KuzLReverse(byte[] input)
  56. {
  57. byte[] state = input;
  58. for (int i = 0; i < 16; i++)
  59. {
  60. state = KuzRReverse(state);
  61. }
  62. return state;
  63. }
Результат работы первого раунда шифрования и расшифрования кода: Подскажите пожалуйста, где я допустил ошибку?

Решение задачи: «Реализация алгоритма шифрования "Кузнечик"»

textual
Листинг программы
  1. for (int i = 1; i < 17; i++)

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

8   голосов , оценка 4.375 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы