From c3c2e580d045c4d4e653af0ef0135df2e50f01c1 Mon Sep 17 00:00:00 2001 From: "Yann Esposito (Yogsototh)" Date: Fri, 17 Jun 2011 15:12:01 +0200 Subject: [PATCH] Resolved pb 59 in C --- 059-bis.c | 142 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 059.hs | 5 ++ 059.rb | 28 ++++------- a.out | Bin 0 -> 11945 bytes array.h | 93 ++++++++++++++++++++++++++++++++++ cipher1.enc | Bin 1202 -> 0 bytes 6 files changed, 250 insertions(+), 18 deletions(-) create mode 100644 059-bis.c create mode 100644 059.hs create mode 100755 a.out create mode 100644 array.h diff --git a/059-bis.c b/059-bis.c new file mode 100644 index 0000000..0ac7a8d --- /dev/null +++ b/059-bis.c @@ -0,0 +1,142 @@ +#include +#include + +#include "array.h" + +int potential_good_str(char *str) { + int nb_spaces=0; + int nb_ascii=0; + int nb_non_ascii=0; + int nb_words=0; + int wordlen=0; + int maxwordlen=0; + int len; + while (*str) { + if (*str == ' ') nb_spaces++; + if (((*str >= 'a') && (*str <= 'z')) || + ((*str >= 'A') && (*str <= 'Z')) ) + { + nb_ascii++; + wordlen++; + } else { + if ((*str == ' ') || (*str == '.')) { + if (wordlen>maxwordlen) { + maxwordlen = wordlen; + } + if (wordlen>3) { + nb_words++; + } + } + wordlen=0; + } + if ((*str < 'A') || (*str > 'z')) nb_non_ascii++; + len++; + str++; + } + return (nb_words > 50); +} + +int decode(Array str, Array code, Array res) { + int i; + empty_Array(res); + if (str->length > res->max_length) { + return 1; + } + for (i=0;ilength;i++) { + push(res, str->chr[i] ^ code->chr[ i % code->length ]); + } + return 0; +} + + +int readInt(int *value, FILE* fd) { + int tmp=0; + int c=0; + for(c=fgetc(fd); (c != EOF) && (c >= '0') && (c <= '9') ; c=fgetc(fd) ) { + tmp=10*tmp + (c-'0'); + } + *value=tmp; + return c != EOF; +} + +void fill_content(char *filename, Array content) { + FILE *fd = NULL; + int value; + // ouverture du fichier + fd = (FILE *)fopen(filename, "r"); + if (fd == NULL) { + fprintf(stderr, "Impossible d'ouvrir %s\n", filename); + exit(2); + } + + // lecture du fichier + while ( readInt(&value,fd) ) { + push(content,value); + } + pop(content); + + fclose(fd); +} + +int rec_crack(Array content, Array code, Array decoded, char *buffer) { + int i; + char tmp[4]; + if (code->length == code->max_length) { + decode(content,code,decoded); + if (potential_good_str(str_Array(decoded,buffer))) { + fprintf(stderr,"Code: %s\nResult: %s\n",str_Array(code,tmp),buffer); + } + } else { + if (code->length == 1) { + fprintf(stderr,"%c",((code->chr[0]>20) && (code->chr[0]<127))?code->chr[0]:'.'); + } + for (i='a';i<='z';i++) { + push(code,i); + rec_crack(content,code,decoded,buffer); + pop(code); + } + } + return 0; +} + +int crack(Array content) { + Array decoded=new_Array(content->max_length); + Array code=new_Array(3); + char tmp[4]; + char *buffer=(char *)malloc(2000); + char *str; + int sum; + + // --- + push(code,'g'); + push(code,'o'); + push(code,'d'); + decode(content,code,decoded); + fprintf(stderr,"Code: %s\nResult: %s\n",str_Array(code,tmp),str_Array(decoded,buffer)); + for (str=buffer; *str; str++) { + sum += *str; + } + fprintf(stderr, "Somme: %d\n",sum); + // --- + + rec_crack(content,code,decoded,buffer); +} + +int main (int argc, char **argv) { + + Array content=new_Array(2000); + + // récupération des arguments + if (argc<2) { + fprintf(stderr, "Usage %s [file]\n", argv[0]); + exit(1); + } + + // rempli content avec le contenu du fichier 1 + fill_content(argv[1], content); + + crack(content); + + free(content); + return 0; +} diff --git a/059.hs b/059.hs new file mode 100644 index 0000000..19c5e18 --- /dev/null +++ b/059.hs @@ -0,0 +1,5 @@ +import System + +main = do + [filename] <- readArgs + f <- open( diff --git a/059.rb b/059.rb index 5e0536f..8fa53e2 100644 --- a/059.rb +++ b/059.rb @@ -1,11 +1,4 @@ codes = File.read("cipher1.txt").split(",").map { |x| x.to_i } -# words = File.read("words.txt").split(",").map { |s| s[1..-2] } -# $is_word={} -# $potential_codes=[] -# words.each do |w| -# $is_word[w]=true -# end - def to_ascii (l) res="" l.each do |c| @@ -14,14 +7,13 @@ def to_ascii (l) res end -# (0..255).each do |x| -# puts "#{x}:\n" -# (0..255).each do |y| -# (0..255).each do |z| -# to_ascii(codes,[x,y,z]) -# end -# end -# end - -puts to_ascii(codes) - +(0..255).each do |x| + (0..255).each do |y| + (0..255).each do |z| + res=to_ascii(codes,[x,y,z]) + res.each do |c| + case c.ord + end + end + end +end diff --git a/a.out b/a.out new file mode 100755 index 0000000000000000000000000000000000000000..ed3b0c1314f62029f01541e211401c24a38f6a56 GIT binary patch literal 11945 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 + free(array); +} + +Array new_Array(int size) { + fprintf(stderr,"Malloc new_Array: struct\n"); + Array array = (Array)malloc(sizeof(struct t_array)); + if (! array) + return NULL; + fprintf(stderr,"Malloc new_Array: array->chr\n"); + array->chr = (char *)malloc(size); + if (! array->chr) { + free(array); + return NULL; + } + array->length=0; + array->max_length=size; + return array; +} + +char *str_Array(Array array, char *tmp) { + int i; + + if (!tmp) { + fprintf(stderr,"Malloc str_Array\n"); + tmp=(char *)malloc(array->length+1); + } + for (i=0; ilength; i++){ + tmp[i]=array->chr[i]; + } + tmp[i]='\0'; + return tmp; +} + +char *show_Array(Array array, char *res) { + int i,j; + int t; + if (res == NULL) { + fprintf(stderr,"Malloc show_Array\n"); + res=(char *)malloc(4*array->max_length + 1); + } + + fprintf(stderr,"Length = %d\n", array->length); + for (i=0,j=0;ilength;i++) { + t = array->chr[i]; + if (t>=100) { + res[j++]=t/100 + '0'; + j++; + } + if (t>=10) { + res[j++]=t/10 - 10*(t/100) + '0'; + } + res[j++]=t - 10*(t/10) - 100*(t/100) + '0'; + res[j++]=','; + } + res[j]='\0'; + + return res; +} + +int push (Array array, char value) { + if (array->length < array->max_length) { + array->chr[array->length]=value; + array->length++; + return true; + } + return false; +} + +int pop(Array array) { + if (array->length == 0) + return -1; + array->length--; + return array->chr[array->length]; +} +void empty_Array(Array array) { + array->length = 0; +} + +#endif diff --git a/cipher1.enc b/cipher1.enc index 6c9dd8ad0330bf695dfe9d8ae9384f7800d81e1d..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644 GIT binary patch literal 0 HcmV?d00001 literal 1202 zcmYjRS#R7n5ay5;MGhs3ySnU^WH%_1wm<{)p$`SxhX!FmA3%s8SsOu`{QsZP87gT4 z>=QM|cg^NM8<~GJ>mXG$Hog>%eH}0AYF=Q>=QsJBUSL|NMoZILXswBT4e1Xzx~SD8 zy|~VBqvsyQUH(<(Uav9e(9ukHn>?yaz5Mutpn}Kr6Qs*($gRzx!&ss6fF4x3Z2Nkz zdE%OeCI{)Fyn=BGokqd+lg#b#D*ht&m$G*yJXOzIgm?J&647_^ReYC!_7;*30~#m* zJj71hhg?}lE$xsE7nt^db5gCSLt0$Ique$FaF^dER>pYK^m!%#k{3K4+_c!Es^HPvy2BxGWCL9W3|XQ%u0w6ANtoTZXQe>C4s{`ad# z2F!J?*bAl>d+}}iUH()AVPK(lNzWw}VLZXE-b3y?5rsaIP_6)@_F^Bk+?J)v6dz5l zjU;RE%lu0>D$2(BDZe1TT7^y=L|s;wPo>vt2eff4pNfyHc@UFxQE6dsL)zd%D66k! zCZ+@uEc2?hBsb5G`Pl)HmKJebfao}!90pA)8Op|-L~rvT#o!1qg`9)RLg}WKH?sB>43R$jHACNN4`WSx&e8L;$3KLf2(j;#U zZ9L8Y-#eU)%MS9v+R7{bi*SMh$=ZUayOu{q=R@_+=_O$7Jbj%d*}*|oPE6OYi`~YU YZQ}s5T+XU3{l!F}T*@=g{{VORA8-MFxc~qF