diff options
Diffstat (limited to 'task1_hex_to_base64.c')
| -rw-r--r-- | task1_hex_to_base64.c | 35 |
1 files changed, 32 insertions, 3 deletions
diff --git a/task1_hex_to_base64.c b/task1_hex_to_base64.c index c4bf7d9..8e19f74 100644 --- a/task1_hex_to_base64.c +++ b/task1_hex_to_base64.c @@ -169,7 +169,20 @@ int convert_to_base64(char *encode, char *result) } -void xor_string(char *str1, char* str2, char *result, int length) { +void xor_string(char *str1, char *key, char *result) +{ + int i, j; + int length_key = strlen(key); + + for(i=0, j=0;i<strlen(str1);i++,j++) { + if (j >= length_key) + j = 0; + + result[i] = str1[i] ^ key[j]; + } +} + +void xor_string_equal_length(char *str1, char* str2, char *result, int length) { int i; for(i=0;i<length;i++) @@ -286,6 +299,18 @@ void task4() { } +void task5() +{ + char *stanze = "Burning 'em, if you ain't quick and nimble\nI go crazy when I hear a cymbal"; + + //printf("%s\n", stanze); + char *result = malloc(strlen(stanze)); + char *printable = malloc(strlen(stanze)*5); + xor_string(stanze, "ICE", result); + hex_binary_to_string(result, printable, 2*strlen(stanze)); + printf("%s\n", printable); +} + int main(int argc, char **argv) { @@ -298,7 +323,7 @@ int main(int argc, char **argv) char *back_hex = malloc(length); 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])); + xor_string_equal_length(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"); @@ -326,10 +351,14 @@ int main(int argc, char **argv) //string_looks_ } - +/* printf("***************************\n"); printf("set 1, challenge 4\n"); task4(); +*/ + //printf("***************************\n"); + //printf("set 1, challenge 5\n"); + task5(); } |
