summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--task1_hex_to_base64.c57
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);
+ }
+
}
}