Небольшая реализация шифра Фейстеля на JavaJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Небольшая реализация шифра Фейстеля на Java

Сообщение Anonymous »

Я пытаюсь реализовать небольшую реализацию шифра Фейстеля. Вот что я пробовал:

Код: Выделить всё

int[] left = {1,2,3};//left half of plaintext
int[] right = {4,5,6};//right half of plaintext
int temp[];//temp for swapping values

//encrypt the plaintext (left and right arrays)
for(int r = 0; r < 3; r++) {//the number of rounds
for(int i = 0; i < right.length; i++){
right[i] = left[i] ^ (scramble(right[i], KEY, r));
}
temp = left;
left = right;
right = temp;
}

//swap left and right array before decryption
temp = left;
left = right;
right = temp;
for(int r = 3; r > 0; r--) {//start from the last round
for(int i = 0; i < right.length; i++) {
right[i] = left[i] ^ (scramble(right[i], KEY, r));
}

//again, swap arrays to do the next round
temp = left;
left = right;
right = temp;
}
Функция округления, скремблирование:

Код: Выделить всё

private static int scramble(int character, int key, int roundNumber) {
return (int) Math.pow(2 * roundNumber * key, character) % 15;
}
Я пытаюсь сначала зашифровать левую и правую половины открытого текста, а затем запустить его через раунды расшифровки - поэтому к концу значения массива должны быть [1,2,3] и [4,5,6] (обратно к открытому тексту). Используя ключевой ввод 8, после расшифровки я получаю значения [15, 13, 0] и [8, 12, 1]. Где я ошибаюсь?

Для простоты я сейчас просто использую константу в качестве ключа, а также ввод целых чисел, а не чтение из файла/использование байтовых массивов.

редактировать:

подсчет циклов был неверным. Изменен «цикл шифрования» на:

Код: Выделить всё

for(int r = 1; r < 4; r++) {//the number of rounds
for(int i = 0; i < right.length; i++){
right[i] = left[i] ^ (scramble(right[i], KEY, r));
}

temp = left;
left = right;
right = temp;
}
Циклы теперь считают раунды 1,2,3 (шифрование) и 3,2,1 (дешифрование). Однако расшифровка по-прежнему не приводит к получению правильного открытого текста.

Подробнее здесь: https://stackoverflow.com/questions/403 ... er-in-java
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»