diff options
author | Nathan Lasseter <nathan.je.lasseter@googlemail.com> | 2013-04-28 12:40:39 +0100 |
---|---|---|
committer | Nathan Lasseter <nathan.je.lasseter@googlemail.com> | 2013-04-28 12:40:39 +0100 |
commit | ce19147e916925945d65823543997d397af40dcb (patch) | |
tree | 2d0b6055ce6a443d58256147236b18a4b762d721 | |
parent | ae2890afb2bc80b986ccf4798490cd4b1208ccff (diff) |
Everchanging passphrase to avoid ECB attacksnonecb
-rw-r--r-- | Makefile | 13 | ||||
-rw-r--r-- | decrypt.c | 72 | ||||
-rw-r--r-- | encrypt.c | 4 |
3 files changed, 84 insertions, 5 deletions
@@ -1,13 +1,18 @@ CFLAGS=-Wall -Wextra -encrypt: encrypt.c +all: encrypt decrypt + +%: %.c gcc ${CFLAGS} -o $@ $^ -install: +install: encrypt decrypt cp encrypt /usr/local/bin/encrypt + cp decrypt /usr/local/bin/decrypt -uninstall: +uninstall: /usr/local/bin/encrypt /usr/local/bin/decrypt rm /usr/local/bin/encrypt + rm /usr/local/bin/decrypt -clean: +clean: encrypt decrypt rm encrypt + rm decrypt diff --git a/decrypt.c b/decrypt.c new file mode 100644 index 0000000..305e1ed --- /dev/null +++ b/decrypt.c @@ -0,0 +1,72 @@ +/* + * SimpleCrypt + * Non-ECB version + * So simple it's all one function. + * + * Nathan Lasseter (User_4574) + */ + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +int main(int argc, char** argv) { + + // We need a file to encrypt + if (argc != 2) { + fprintf(stderr, "Usage: encrypt <file>\n"); + return EXIT_FAILURE; + } + + // Now lets open that file + FILE* file = fopen(argv[1], "r"); + if (file == NULL) { + fprintf(stderr, "No such file\n"); + return EXIT_FAILURE; + } + + // Now we need the passphrase. Get it + char *passphrase = malloc(256); + do { + printf("Enter Passphrase: "); + if (fgets(passphrase, 255, stdin) == NULL) { + fclose(file); + fprintf(stderr, "Read error or end of file\n"); + return EXIT_FAILURE; + } + } while (strlen(passphrase) <= 0); + + // And a temporary file to hold the encrypted data + char tpath[] = ".SimCr.XXXXXX"; + int tempfd = mkstemp(tpath); + FILE* temp = fdopen(tempfd, "w"); + + // Now we decrypt! + int passlen = strlen(passphrase) - 2; + int c, d, j = 0; + + while ((c=fgetc(file)) != EOF) { + d = c - passphrase[j]; + passphrase[j] = c; + fputc(d, temp); + + if (j == passlen) j=0; + else j++; + } + + // Close the files + fflush(temp); + fclose(temp); + fclose(file); + + // Free used memory + free(passphrase); + + // Move the file back + if (rename(tpath, argv[1]) != 0) { + fprintf(stderr, "Your encrypted file is located in %s.", tpath); + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} @@ -1,5 +1,6 @@ /* * SimpleCrypt + * Non-ECB version * So simple it's all one function. * * Nathan Lasseter (User_4574) @@ -45,7 +46,8 @@ int main(int argc, char** argv) { int c, d, j = 0; while ((c=fgetc(file)) != EOF) { - d = c ^ passphrase[j]; + d = c + passphrase[j]; + passphrase[j] = d; fputc(d, temp); if (j == passlen) j=0; |