summaryrefslogtreecommitdiff
path: root/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'main.c')
-rw-r--r--main.c53
1 files changed, 53 insertions, 0 deletions
diff --git a/main.c b/main.c
new file mode 100644
index 0000000..c065116
--- /dev/null
+++ b/main.c
@@ -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;
+}

Generated by cgit