diff options
| author | Benedict <benedict@0xb8000.de> | 2016-03-01 21:56:15 +0100 |
|---|---|---|
| committer | Benedict <benedict@0xb8000.de> | 2017-02-21 13:00:24 +0100 |
| commit | 2672a46218139fc5cbb4844096da451f7e243849 (patch) | |
| tree | be3fc0d327e66f6eba63f3ced9be21f5b4851a7f | |
| parent | 602197a248f3d6ffe5125d5fbaf9c8f87df3c6c5 (diff) | |
set 1, challenge 3 completed
| -rw-r--r-- | task1_hex_to_base64.c | 57 |
1 files changed, 52 insertions, 5 deletions
diff --git a/task1_hex_to_base64.c b/task1_hex_to_base64.c index 9871055..40c0a94 100644 --- a/task1_hex_to_base64.c +++ b/task1_hex_to_base64.c @@ -1,6 +1,7 @@ #include <stdio.h> #include <string.h> #include <stdlib.h> +#include <ctype.h> static const unsigned char base64_encode[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" @@ -135,7 +136,7 @@ void two_char_hex(char *start, char *result) *result = *result | second; } -int convert_hex_string_to_binary(char *encode, char* result) +int convert_hex_string_to_character_string(char *encode, char* result) { int i; int length = strlen(encode); @@ -177,6 +178,19 @@ void xor_string(char *str1, char* str2, char *result, int length) { return; } + + +void xor_string_single_byte(char byte, char* string, char *result, int length) { + int i; + + for(i=0;i<length;i++) + result[i] = string[i] ^ byte; + + result[i] = '\0'; + + return; +} + /** * results must be to times bigger than str1 */ @@ -196,6 +210,25 @@ void hex_binary_to_string(char *str1, char *result, int length) result[i*2] = '\0'; } + + +int score_based_on_frequent_characters(char *string) +{ + int number = 0; + int i; + int length = strlen(string); + char tmp; + + for(i=0;i<strlen(string);i++) { + tmp = tolower(string[i]); + if( tmp == 'e' || tmp == 'a' || tmp == 'i' || tmp == 'o' + || tmp == 'u' ) + number++; + } + + return (number*100/length); +} + int main(int argc, char **argv) { if (argc == 3 ) { @@ -205,25 +238,39 @@ int main(int argc, char **argv) char *base64= malloc(length); char *__xor_string = malloc(length); char *back_hex = malloc(length); - int i = convert_hex_string_to_binary(argv[1], tmp); - int j = convert_hex_string_to_binary(argv[2], tmp2); + int i = convert_hex_string_to_character_string(argv[1], tmp); + int j = convert_hex_string_to_character_string(argv[2], tmp2); xor_string(tmp, tmp2, __xor_string, strlen(argv[2])); // convert the __xor_string to printable charaters hex_binary_to_string(tmp2, back_hex, strlen(argv[2])); + printf("***************************\n"); + printf("set 1, challelnge 1:\n"); printf("input string 1:\n"); printf("%s\n", argv[1]); printf("input string 2:\n"); printf("%s\n", argv[2]); - /* + printf("char string of arg 1:\n"); printf("%s\n", tmp); printf("char string of arg 2:\n"); printf("%s\n", tmp2); - */ + printf("string 2 from hex back to printable charaters:\n"); printf("%s\n", back_hex); + printf("***************************\n"); + printf("set 1, challenge 2\n"); printf("xor string:\n"); hex_binary_to_string(__xor_string, back_hex, strlen(argv[2])); printf("%s\n", back_hex); + + printf("***************************\n"); + printf("set 1, challenge 3\n"); + for(i= 'A'; i< 'Z'; i++) { + xor_string_single_byte((char) i, tmp2, __xor_string, j); + int score = score_based_on_frequent_characters(__xor_string); + if(score > 30) + printf("char: %c, score: %i, string: %s\n", (char) i, score, __xor_string); + } + } } |
