2015-12-06 9 views
0

Я пытаюсь расшифровать .bin-файл, который я не знаю, ключ для ответа на этот вопрос, который мы задавали в классе: 8) Предположим, вы не знали, значение «ключа», которое вы использовали в 6). Вы еще можете расшифровать зашифрованный файл? Если так, напишите программу, которая сделает это. (нет знаков, этот просто для удовольствия!) ProofГде я ошибаюсь в своем дешифровании

int main(int argc, char* argv[]) {        
uint8_t c, key = 0, uintOutput = 0; 
string Encrypted, everything[255]; 
char b, charOutput; 
int x = 0; 
while ((b = getchar()) != EOF) { 
    Encrypted = Encrypted + b;     //read in chars from file and add them to a string (still encrypted) 
} 

Я попробовал несколько методов, и я действительно думал, что это один будет работать.

for (int i = 0; i < Encrypted.length(); i++) //for the length of the encrypted string 
     { 
      x = 0;        //resets the string it is entering into; Array position 0 
      for (key = 0; key < 255; key++)  //key used must be a lowercase letter 
      { 

       c = (uint8_t)Encrypted[x];      //convert char 'x' of encrypted string to a byte 
       uintOutput = (c^key);       //XOR with current key guess 
       charOutput = (char)uintOutput;     //convert byte back to char again 
       everything[x] = everything[x] + charOutput;  //add xor'd char to currently selected string 
       x++;           //move to next array position; to next string 
      } 

     } 

Где все это массив строк - все [255], ключ байт, представляющий ключ шифрования/дешифрования.

  for (int y = 0; y < (255* Encrypted.length()); y++)  //print out for number of possibilities 
     { 
      cout << everything[y] << endl << endl; 
     } 

return 0; 

} Для запуска программы я использую .bat-файл с перенаправлением файла в моем случае файл летучего содержит следующее: program.exe <EncryptedText.bin>> ciphertext.bin Где EncryptedText.bin это файл, который был зашифрован с неизвестным ключом и ciphertext.bin - это то, где выводится дешифрованный текст.

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

Основной вопрос, который я имею сообщение об ошибке, которое появляется при запуске файла .bat Failed

Debug Assertion!

Программа: C: WINDOWS \ SYSTEM32 \ MSVCP140D.ddl

файл я: \ Microsoft Visual Studio \ VC \ включить \ xstring

Line: 1681

Выражение: строка индекс вне диапазона

... (повторить и т.д. здесь)

Я бы очень признателен за любую понимание этого, Я просто не могу видеть, где я пошло не так, и я был возиться с этим вопросом в течение нескольких часов

+0

Это известно как шифр Vigenère. Есть много ссылок на то, как криптоанализировать его. –

ответ

0

Вот где вы пошло не так (только соответствующие строки кода):

for (int i = 0; i < Encrypted.length(); i++) 
{ 
     x = 0; 
     for (key = 0; key < 255; key++) 
     { 
       c = (uint8_t)Encrypted[x]; 

       // Some code here that's not relevant 

       x++; 
     } 
} 

Как должно быть немедленно очевидно из этого, ваш код будет пытаться получить доступ Encrypted[0] через Encrypted[254], так что если ваша Encrypted строка не является 254 длинные символы, это приведет к неопределенному поведению.

0

Это действительно выглядит как здесь:

for (int y = 0; y < (255* Encrypted.length()); y++) 

индекс выходит из everything[255].