diff options
Diffstat (limited to 'main.c')
-rw-r--r-- | main.c | 53 |
1 files changed, 53 insertions, 0 deletions
@@ -0,0 +1,53 @@ +#include <stdio.h> +#include <string.h> + +#define MAXLEN 256 + +int readfile(char* path, char* buf) { + FILE* fd; + fd = fopen(path, "r"); + if(!fd) + return -1; + fgets(buf, MAXLEN, fd); + fclose(fd); + return 0; +} + +void applexor(char* msg, char* out) { + int keys[] = {125, 137, 82, 35, 210, 188, 221, 234, 163, 185, 31}; + int i = 0; + + // Encrypt/decrypt (xor) + for(i=0; msg[i] != '\0'; i++) + out[i] = msg[i] ^ keys[i % 11]; + + // If the previous char wasn't a null byte, we are likely encrypting not + // decrypting, so add a null byte. + if(out[i-1] != '\0') { + out[i] = '\0' ^ keys[i % 11]; + i++; + } + + // Append until we hit a multiple of 12 + for(; i%12 != 0; i++) + out[i] = msg[i%strlen(msg)] ^ keys[i % 11]; + out[i] = '\0' ; +} + +int main(int argc, char* argv[]) { + char in[MAXLEN]; + char out[MAXLEN]; + if(argc == 1) { + printf("Must provide path to file or a password to encrypt\n"); + return 1; + } + + // If the file can't be opened, try to use the "path" as a password + if(readfile(argv[1], in) == -1) + strcpy(in, argv[1]); + + applexor(in, out); + + printf("%s\n", out); + return 0; +} |