Алгоритм расшифровки шифрования Twofish

Я использую пример кода из репозитория git, чтобы понять алгоритм twofish. Код ниже работает очень хорошо. отлично, результаты также верны, проверены с помощью онлайн-инструмента ref http://twofish.online-domain-tools.com/

проблема следующая: -

int[] plainText = new int[] { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C,
            0x0D, 0x0E, 0x0F };

    int[] p = new int[4];
    for (int i = 0; i < 4; i++) {
        p[i] = plainText[4 * i] + 256 * plainText[4 * i + 1] + (plainText[4 * i + 2] << 16)
                + (plainText[4 * i + 3] << 24);
    }
    System.out.println("Input:");
    Utils.printInput(p);
    int[] key = p; //
    System.out.println("Key:");
    Utils.printInput(key);
    //
    int[] encrypted = TwoFish.encrypt(p, key);
    //
    System.out.println("Encrypted:");
    Utils.printInput(encrypted);
    System.out.println();

    int[] decrypted = TwoFish.decrypt(encrypted, key);
    System.out.println("Decrypted:");
    Utils.printInput(decrypted);

В приведенном выше коде один и тот же ключ используется как обычный текст и ключ, хотя существует требование передачи простого текста и ключа.

int[] encrypted = TwoFish.encrypt(p, key);

приведенный выше код должен принимать входные данные из

int[] encrypted = TwoFish.encrypt("The plain text information", "000102030405060708090A0B0C0D0E0F");

person Dheeraj Singh    schedule 20.05.2020    source источник
comment
Я не понимаю, в чем проблема. Что-то не работает?   -  person President James K. Polk    schedule 20.05.2020
comment
Мне нужно понять, как он интерпретирует параметры, полученные в TwoFish.encrypt(p, key); метод, чтобы я мог проверить его на данных, считываемых со стандартного ввода   -  person Dheeraj Singh    schedule 20.05.2020


Ответы (1)


Хорошо, учебник по криптографии:

  • Вам нужен режим работы для блочного шифра Twofish. Однако мне трудно распознать один из них в коде, и это плохой знак.
  • Для режима работы требуется IV, а для режима CBC — случайный или, по крайней мере, полностью непредсказуемый IV.
  • Ваш открытый текст, который вам нужно закодировать. В настоящее время рекомендуется использовать UTF-8 (он совместим с ASCII, поэтому для вашей строки вы действительно не ошибетесь).
  • Вам нужен шестнадцатеричный декодер для декодирования ключа в массив байтов.

Кстати, обычно мы реализуем криптографические блочные шифры и другие примитивы для работы с битами, а точнее с байтами. Шифр или, по крайней мере, режим работы должен принимать байты, а не целые числа.

Удачи!

person Maarten Bodewes    schedule 20.05.2020
comment
Я даже не видел этот режим работы в коде, но я сравнил результаты, сгенерированные из кода, с онлайн-инструментом, я получаю правильные результаты в ECB (Электронная книга кодов), предполагает, что у меня есть код Java, работающий в режиме ECB. ? - person Dheeraj Singh; 21.05.2020
comment
Конечно, но режим ECB небезопасен для текстовых строк, он напрямую приводит к утечке информации, если текстовый блок повторяется, даже в нескольких зашифрованных текстах. - person Maarten Bodewes; 21.05.2020
comment
Спасибо — @Maarten Bodewes с предоставленной базой знаний смог сделать это в режиме CBC. - person Dheeraj Singh; 21.05.2020