Я пытаюсь кодировать AES, используя режим Cipher Block Chaining (CBC). Я почти уверен, что у меня правильная структура (сохранение предыдущего зашифрованного текста с новым открытым текстом перед отправкой в AES и наоборот при расшифровке. У меня проблема с расшифровкой зашифрованного файла обратно в исходный открытый текст. Я думаю, это может быть как-то связано с тем, как он ксероксирован. Я знаю, что мой алгоритм AES верен. Я собираю вместе два символьных массива. Я знаю, что если вы возьмете результаты кеширования двух вещей вместе, а затем отсканируете одно из них обратно с ответом вы должны получить другой операнд обратно. Однако, когда я проверяю эту функциональность, он не работает так.
Где я читаю его в виде открытого текста и переписываю его с помощью предыдущего зашифрованного текста
//THERE IS A RANDOM INITIALIZATION VECTOR BEFORE GETTING INTO THE WHILE LOOP
while ((bytes_in = (read(fin, plaintext, AES_BLOCK)) ))
{
for (count = 0; count < AES_BLOCK; count++){
xor[count] = (plaintext[count]) ^ (ciphertext[count]);
}
//AES STUFF NOT SHOWN SO THERE ISN'T MUCH CODE
status = write (fdsk, ciphertext, strlen (ciphertext));
for (count =0; count < AES_BLOCK; count++)
plaintext[count] = '0';
}
Расшифровывающая часть:
bytes = read(fin, previous_CT, AES_BLOCK); //reads in the initialization vector
while(total_bytes < aes_length)
{
bytes = read(fin, ciphertext, AES_BLOCK);
for(count = 0; count < AES_BLOCK; count++){
plaintext[count] = (xor[count]) ^ (previous_CT[count]);
printf("plaintext %d", plaintext[count]);
}
}
Подводя итог моей проблеме / вопросу:
Мне интересно, есть ли что-то для ксерокса символов, которое я не знаю, что мне нужно сделать. Кажется, я делаю это правильно, но по некоторым причинам я не получаю правильные результаты. Мне также интересно, может ли то, как я читаю информацию, портит мою программу. Пожалуйста, помогите мне!
Спасибо!