128 lines
2.6 KiB
C
128 lines
2.6 KiB
C
|
/* enc.c Convert a string, each character into binary. Take "key"
|
||
|
* and convert to binary. xor character binary with key binary to make
|
||
|
* the new encrypted character. Key will be obtained through input.
|
||
|
* (c) 2006 Shaun Marquardt.
|
||
|
*/
|
||
|
|
||
|
#include <stdio.h>
|
||
|
#include <stdlib.h> //exit //strtol
|
||
|
#include <conio.h> //clrscr //getche
|
||
|
#include <string.h> //strlen for htoa
|
||
|
#include <ctype.h> //toupper for htoa
|
||
|
|
||
|
#define TRUE 1
|
||
|
#define FALSE !TRUE
|
||
|
|
||
|
void htoa( char *input );
|
||
|
long strtol(const char *s, char **endp, int base); //strtol is in stdlib.h
|
||
|
|
||
|
int main(int argc, char *argv[])
|
||
|
{
|
||
|
char input_str[100];
|
||
|
char key_str[100];
|
||
|
char enc_str[100];
|
||
|
char input_bits;
|
||
|
char key_bits;
|
||
|
char enc_bits[8];
|
||
|
char *bp;
|
||
|
int p = 0;
|
||
|
|
||
|
clrscr();
|
||
|
printf("Enter the string to be encrypted: ");
|
||
|
gets(input_str);
|
||
|
|
||
|
printf("\nDebug: input_str = %s",input_str);
|
||
|
|
||
|
printf("\nEnter Encryption Key: ");
|
||
|
for(p=0; input_str[p] != NULL; p++)
|
||
|
key_str[p] = getche();
|
||
|
|
||
|
printf("\nDebug: key_str = %s",key_str);
|
||
|
|
||
|
printf("\n\n========Encrypt.========\n\n");
|
||
|
sprintf(input_bits, "%ld", strtol(input_str, &bp, 2)); //ascii ->bin
|
||
|
sprintf(key_bits, "%ld", strtol(key_str, &bp, 2));
|
||
|
|
||
|
printf("\nDebug: input_bits = %s\n", input_bits);
|
||
|
printf("Debug: key_bits = %s\n", key_bits);
|
||
|
/* bitwise math-o-rama */
|
||
|
|
||
|
for(p=0; input_bits[p] != NULL; p++)
|
||
|
{
|
||
|
if (input_bits[p] == key_bits[p])
|
||
|
enc_bits[p] = 1;
|
||
|
|
||
|
enc_bits[p] = 0;
|
||
|
}
|
||
|
|
||
|
sprintf(enc_str, "%ld", strtol(enc_bits, &bp, 16)); //bin ->hex
|
||
|
|
||
|
htoa(enc_str);
|
||
|
printf("\nDone. Press the enter key to exit the program.");
|
||
|
getch();
|
||
|
exit(0);
|
||
|
}
|
||
|
|
||
|
/* my stolen htoa (c) me */
|
||
|
void htoa( char *input )
|
||
|
{
|
||
|
unsigned char a;
|
||
|
char hex[5];
|
||
|
char buf[5];
|
||
|
int x = 0, col = 0;
|
||
|
int done;
|
||
|
|
||
|
hex[0] = '\0';
|
||
|
|
||
|
if( (strlen(input) % 2) != 0 )
|
||
|
{
|
||
|
printf("Hex characters must be entered in pairs.\n");
|
||
|
getch();
|
||
|
exit(1);
|
||
|
}
|
||
|
|
||
|
printf("Hex - \"%s\"\n",input);
|
||
|
printf("--== Output ==--\n\n");
|
||
|
printf("\"");
|
||
|
|
||
|
done = FALSE;
|
||
|
while(!done)
|
||
|
{
|
||
|
if(input[x] == '\0') //End of input, done.
|
||
|
{
|
||
|
printf("\"\n");
|
||
|
done = TRUE;
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
if(input[x] == ' ') //Space character? Print out a space.
|
||
|
{
|
||
|
printf("%c", ' ');
|
||
|
x++;
|
||
|
}
|
||
|
|
||
|
sprintf(hex, "%c%c", toupper(input[x]), toupper(input[x+1])); //Get Hex Char
|
||
|
x+=2;
|
||
|
|
||
|
for(a=32;a<128;a++)
|
||
|
{ //Go through list of characters
|
||
|
sprintf(buf, "%X",a);
|
||
|
|
||
|
if(!strcmp(buf, hex)) //Matching, print character
|
||
|
printf("%c",a);
|
||
|
else //Not Matching, continue
|
||
|
continue;
|
||
|
|
||
|
col++;
|
||
|
if(col >= 79)
|
||
|
{
|
||
|
col = 0;
|
||
|
printf("\n\r");
|
||
|
}
|
||
|
break;
|
||
|
} //end "a" for loop
|
||
|
|
||
|
} //end while
|
||
|
return;
|
||
|
} //end htoa
|