So the bloody thing works so i will have to paste original code sorry
Code:
#include <stdio.h>
#include <stdlib.h>
void Encrypt( char *, char *, char *, int, int );
void Decrypt( char *, char * );
void Get_Password( char *, char * );
int StrLength( char * );
int IsPrintable( int );
void PrintGuesses( char [3][26], int );
int main()
{
//char Text[] = "TOMORROW NEVER DIES";
char Text[] = "The quick brown fox jumps, over the lazy dog!";
char Pword[] = "hel";
char Encrypted[sizeof Text];
// Don't hardcode string lengths.
int len = StrLength( Text );
int plen = StrLength( Pword );
printf("%s\n", Text);
Encrypt( Text, Pword, Encrypted, plen, len );
// Encrypted characters are not necessarily printable.
for ( int i = 0; i < len; i++)
printf(IsPrintable(Encrypted[i]) ? "%c" : "{0x%02X}", Encrypted[i]);
putchar('\n');
int Guesses[ sizeof Pword ][26] = { 0 };
// Don't use numbers for letters, e.g., say 'A' instead of 65.
for ( int StartIndex = 0; StartIndex < plen; StartIndex++ )
{
int GuessIndex = 0;
for ( int i = 'a'; i <= 'z'; i++ )
{
int Letter = 1;
for ( int j = StartIndex; j < len; j += plen ) {
int x = Encrypted[j] ^ i;
if ( ! ( ( x >= 'A' && x <= 'Z' ) || ( x >= 'a' && x <= 'z' ) || ( x >= ' ' && x <= '@' ) ) )
{
Letter = 0;
break;
}
}
if ( Letter )
{
Guesses[StartIndex][GuessIndex] = i;
GuessIndex++;
}
}
putchar('\n');
}
PrintGuesses( Guesses, plen );
printf("%s\t%s\t%s\n", "1st", "2nd", "3rd");
for ( int i = 0; ; i++ ) //first letter
{
if ( Guesses[0][i] == 0 )
break;
for ( int j = 0; ; j++ ) // second letter
{
if ( Guesses[1][j] == 0 )
break;
for ( int k = 0; ; k++ ) //third letter
{
if ( Guesses[2][k] == 0 )
break;
char GuessedPword[sizeof Pword] = { '\0' };
GuessedPword[0] = Guesses[0][i];
GuessedPword[1] = Guesses[1][j];
GuessedPword[2] = Guesses[2][k];
printf("%d\t%d\t%d = %s\n", i, j, k, GuessedPword);
}
}
}
return 0;
}
void Encrypt( char *Text, char *Pword, char *Encrypted, int Pwlen, int Txtlen )
{
for ( int j = 0, i = 0; Text[i]; i++, j = (j + 1) % Pwlen )
Encrypted[i] = Text[i] ^ Pword[j];
Encrypted[Txtlen] = '\0';
}
void Decrypt( char *Encrypted, char *Pword )
{
for ( int j = 0, i = 0; i < 20 ; i++ )
{
printf("%c", Encrypted[i] ^ Pword[j]);
if ( j == 4 ) j = 0;
else ++j;
}
putchar('\n');
}
void Get_Password( char *Encrypted, char *Text )
{
for ( int j = 0, i = 0; i < 20 ; i++, j++ )
{
printf("%c", Encrypted[i] ^ Text[j]);
}
putchar('\n');
}
int StrLength( char * str )
{
int Counter = 0;
for ( int i = 0; str[i]; i++ )
Counter++;
return Counter;
}
int IsPrintable( int x )
{
return ( x > 32 && x < 127 ) == 1;
}
void PrintGuesses( char Guesses[3][26], int plen )
{
for ( int i = 0; i < plen; i++ )
{
printf("%d ", i);
for ( int j = 0; j < 26; j++ )
{
if ( Guesses[i][j] == 0 )
break;
printf("%c ", Guesses[i][j]);
}
putchar('\n');
}
}