Προς το περιεχόμενο

Κρυπτογράφηση και κωδικοποίηση σε C++


Jaco

Προτεινόμενες αναρτήσεις

anaferetai stin tainia prestige gia opoion tin exei. kikliki metatopisi ton grammaton basi kleidiou.

 

ena eukolo gia ton algorithmo einai na parete mikres lekseis pou einai eukolo na breis ti einai. etsi briskontas kapoia arxeia grammata kai antikathistontas briskeis kai ta ipoloipa. mporei na ginei pio diskolo an i metatopisi ton grammaton ginetai gia kathe gramma ksexorista meso kapoias formulas i kapoio allo meso.

 

paradeigma an exoume ti leksi κρυπτογραφημα auto mporei na ginei pairnontas oxi ena stathero kleidi alla ti thesi tou epomenou grammatos.

 

PARADEIGMA: to Κ metatopizetai me basi to Ρ' date=' to Υ metatopizei Ρ κλπ. etsi exeis metablito kleidi me basi tis thesis tou epomeno grammatos tis leksis. gia tin apokriptografisi kaneis tin anapodi diadikasia.

 

10 17 20 16 ...............

K R Y P T O G R A F H M A

 

To K tha paei 17 theseis mprosta, to R tha paei 20 theseis mprosta, to Y tha paei 16 theseis mprosta klp......

[/quote']

. . . . . . . . .

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

  • Απαντ. 125
  • Δημ.
  • Τελ. απάντηση

Έκανα ένα παράδειγμα κρυπτογράφησης αγγλικού κειμένου με το πρόγραμμα Ceasar_Cipher.c του μυνήματος http://www.insomnia.gr/vb3/showpost....1&postcount=44:

 

Κατέβασα το αρχείο Ceasar_Cipher.c.zip και εκτέλεσα στο τερματικό μου τα ακόλουθα:

 

>
chiossif@SUSE102:~/Desktop> mv Ceasar_Cipher.c.zip Ceasar_Cipher.c.gz
chiossif@SUSE102:~/Desktop> gunzip Ceasar_Cipher.c.gz
chiossif@SUSE102:~/Desktop> gcc -o Ceasar_Cipher Ceasar_Cipher.c
chiossif@SUSE102:~/Desktop> ./Ceasar_Cipher

Ceasar Cipher utility

Usage:  Ceasar_Cipher input_filename output_filename integer_shift_value

chiossif@SUSE102:~/Desktop> ./Ceasar_Cipher MyText.txt MyText_enc.txt XXX
chiossif@SUSE102:~/Desktop>

 

όπου XXX ένας φυσικός αριθμός στο διάστημα [0' date= 255].

Σας δίνω το αρχείο που δημιουργήθηκε και σας προκαλώ με ΚΩΔΙΚΑ ΣΑΣ να το αποκρυπτογραφήσετε. Το πρόγραμμα που θα φτιάξετε προφανώς θα το αποστείλετε εδώ μαζί με ότι άλλο χρειαστείτε και φυσικά ένα παράδειγμα εκτέλεσης του. Η αποκρυπτογράφηση μπορεί να γίνει χωρίς ή με την παρέμβαση του χρήστη.

 

Όπως ίσως διαβάσατε δεν είναι δύσκολο, είναι απλώς μια αρχή...

. . . . . . . .

MyText_enc.txt

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Το παρακάτω πρόγραμμα δοκιμάζει και τα 256 κλειδιά (brute-force attack) ώστε να σπάσει το κρυπτογράφημα.

Η έξοδος δίνεται στην οθόνη και μπορεί να ανακατευθυνθεί εύκολα σε κάποιο αρχείο με την χρήση του > ως πχ. software > decrypt.txt.

Το λογισμικό δεν χρησιμοποιεί καμία κρυπταναλυτική τεχνική ώστε να βοηθά τον χειριστή στον άμεσο εντοπισμό της θέσης του αποκρυπτογραφημένου κειμένου -αν δεν υπάρχουν bugs σε περισσότερες δοκιμές μπορεί να προσθέσω κάτι που έχω υπόψη μου -σκορ κοινών Αγγλικών λέξεων' date=' θα δούμε...

 

Ο κώδικας βασίζεται σε παλαιότερο πρόγραμμα μου, που υπολόγιζε το κρυπτογράφημα του Καίσαρα με ορισμένες διορθώσεις ώστε να δουλεύει για το εύρος των 256 πιθανών κλειδιών και να υπολογίζει σωστά τον αριθμό του χρησιμοποιούμενου κλειδιού.

 

Φυσικά, όπως πάντα μπορεί να υπάρχουν bugs - προς σεβασμό στο quiz δεν δημοσιεύω το κλειδί..

 

>
// CEASAR De-Cryptography in C by DIRECTX 

#include <stdio.h> 
#include <string.h> 
#include <stdlib.h> 
#include <io.h> 
//--------------------------------------------------------------------------- 
char    *_CeasarV2(char *pszPlaintext,long nLen,int nKey); 
//--------------------------------------------------------------------------- 
char   *szBuffer = NULL, 
            *pszCB = NULL; 
int            nKey; 
long        lLen; 
FILE   *Stream; 

int main(int argc, char* argv[]) 
{ 
   if((Stream=fopen(argv[1],"rb"))==NULL) 
    printf(" Cannot open file for read - %s\n",argv[1]); 
   else 
    { 
           if((lLen=filelength(fileno(Stream)))==-1L) 
            { 
                   fclose(Stream); 
                   printf(" Cannot detect file length - %s\n",argv[1]); 
                   return -1; 
            } 
           if((szBuffer=malloc(lLen+1))==NULL) 
            { 
         fclose(Stream); 
                   printf(" File too big - %s\n",argv[1]); 
                   return -1; 
            } 
           memset(szBuffer,0,lLen+1); 
           if(fread(szBuffer,lLen,1,Stream)!=1) 
            { 
                   free(szBuffer); fclose(Stream); 
                   printf(" File read error - %s\n",argv[1]); 
                   return -1; 
            } 

        for(nKey=1;nKey<256;nKey++) 
           { 
               pszCB = _CeasarV2(szBuffer,lLen,nKey); 
               printf("KEY:%d\n%s\n",nKey,pszCB); 
               free(pszCB); 
           } 

        free(szBuffer); 
    } 

   return 0; 
} 
//--------------------------------------------------------------------------- 
char    *_CeasarV2(char *pszPlaintext,long nLen,int nKey) 
{ 
   int        nCharIdx; 
   char *pszCBuffer = NULL; 

   if((pszCBuffer=malloc(nLen+1))!=NULL) 
    { 
        memset(pszCBuffer,0,nLen+1); 
        memcpy(pszCBuffer,pszPlaintext,nLen); 
    } 

   for(nCharIdx=0;nCharIdx<strlen(pszCBuffer);nCharIdx++) 
    pszCBuffer[nCharIdx]-=nKey;  // bug-fix from previous version! 

   return    pszCBuffer; 
} 

[/quote']

. . . . . . .

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Το "CEASAR De-Cryptography in C by DIRECTX" κάνει ότι υπόσχεται.

 

Χρειάστηκε να κάνω την ακόλουθη αλλαγή:

 

>
/*...*/ 
int main(int argc, char* argv[]) 
{ 
int curpos; /* Προσθήκη */ 

   if((Stream=fopen(argv[1],"rb"))==NULL) 
    printf(" Cannot open file for read - %s\n",argv[1]); 
   else 
    { 
       curpos = ftell(Stream); /* Προσθήκη */ 
        fseek(Stream,0L,SEEK_END); /* Προσθήκη */ 
        lLen=ftell(Stream); /* Προσθήκη */ 
       fseek(Stream,curpos,SEEK_SET) /* Προσθήκη */; 
           if(lLen==-1L) /* Διόρθωση */ 
            { 
                   fclose(Stream); 
                   printf(" Cannot detect file length - %s\n",argv[1]); 
                   return -1; 
            } 
/*.......*/ 

 

για να βγάλω την εξάρτηση από io.h και filelength(fileno(Stream)). (Γινόταν και αλλιώς αλλά δεν είναι αυτό το θέμα μας.)

 

Λοιπόν τώρα που φτάσαμε ως εδώ προτείνω να συνεχίσουμε με στόχο τον αυτόματο εντοπισμό του κλειδιού. Ας ξεκινήσουμε με μια ματιά εδώ: http://esl.about.com/library/vocabul...1000_list1.htm

. . . . . . .

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Τα τελευταία Posts αναγκάστηκα να τα ενοποιήσω διότι το σύστημα προέβαινε σε αυτόματο Merge τους.

 

Από Directx την 28/01/2007 - 12:19

 

Ο παρακάτω νέος κώδικας (σήμανση R2) αναζητεί 70+ Αγγλικές λέξεις (μέθοδος dictionary-based attack) στο αποκρυπτογραφημένο με έκαστο των 256 κλειδιών κείμενο' date=' ενώ παράλληλα για κάθε κλειδί αποθηκεύει το σκορ που του αναλογεί σε έναν πίνακα _TScores.

 

Το σκορ αυξάνεται κάθε φορά που εντοπίζουμε κάποια από τις Αγγλικές λέξεις στο κείμενο, η βαθμολογία κάθε λέξης εξαρτάται από την θέση της στον πίνακα, έτσι οι πρώτες και πιο κοινές λέξεις βαθμολογούνται ανώτερα από επόμενες κτλ, με βάση τον πίνακα http://esl.about.com/library/vocabul...1000_list1.htm.

 

Όταν δοκιμασθούν όλα τα πιθανά κλειδιά, ταξινομεί τα αποτελέσματα των σκορ τους και επιστρέφει το κείμενο αποκρυπτογραφημένο με εκείνο το κλειδί που έχει την ανώτερη βαθμολογία εντός του πίνακα _TScores.

 

Αν το ανώτερο σκορ είναι μηδέν, θεωρεί ότι η διαδικασία απέτυχε.

 

Αν και δεν κερδίζουμε τόσο σε ταχύτητα αποκρυπτογράφησης εντούτοις εάν η κρυπτανάλυση πετύχει ο χειριστής δεν υποχρεούται να βρει μόνος του ανάμεσα στα αποτελέσματα το σωστό κλειδί.

 

Από την άλλη πλευρά αν το κείμενο δεν περιέχει αυτές τις 70+ Αγγλικές λέξεις η κρυπτανάλυση αποτυγχάνει, το ίδιο συμβαίνει και αν δεν μεσολαβούν κενά μεταξύ των λέξεων (πχ. συνεχόμενο κείμενο).

 

Για την ενεργοποίηση της κρυπτανάλυσης τοποθετούμε μετά το όνομα του κρυπτογραφημένου αρχείου τον διακόπτη –smart, πχ. software encrypted.txt –smart

 

Φυσικά όπως πάντα, μπορεί να υπάρχουν bugs..

 

>
// CEASAR De-Cryptography R2 in C by DIRECTX 

#include <stdio.h> 
#include <string.h> 
#include <stdlib.h> 
//--------------------------------------------------------------------------- 
char    *_CeasarV2(char *pszPlaintext,long nLen,int nKey); 
int         _Score(char *pszBuffer,long nLen); 
int         _QSRT (const void*,const void*); 
//--------------------------------------------------------------------------- 
char   *szBuffer = NULL, 
            *pszCB = NULL; 
int            nKey, nSmart = 0; 
long        lLen; 
FILE   *Stream; 

typedef struct tagScores 
{ int    nScore, nKey; } 
_TScores; 

_TScores    Scores[256]; 

int main(int argc, char* argv[]) 
{ 
       // Start of Chiossif Improvements 
       int curpos; /* Προσθήκη */ 

       if((Stream=fopen(argv[1],"rb"))==NULL) 
        printf(" Cannot open file for read - %s\n",argv[1]); 
       else 
        { 
               curpos = ftell(Stream);             /* Προσθήκη */ 
               fseek(Stream,0L,SEEK_END);         /* Προσθήκη */ 
               lLen=ftell(Stream);                     /* Προσθήκη */ 
               fseek(Stream,curpos,SEEK_SET) /* Προσθήκη */; 
               if(lLen==-1L)                                 /* Διόρθωση */ 
                { 
                       fclose(Stream); 
                       printf(" Cannot detect file length - %s\n",argv[1]); 
                       return -1; 
                } 
       // End of Chiossif Improvements 

               if((szBuffer=malloc(lLen+1))==NULL) 
                { 
                       fclose(Stream); 
                       printf(" File too big - %s\n",argv[1]); 
                       return -1; 
                } 
               memset(szBuffer,0,lLen+1); 
               if(fread(szBuffer,lLen,1,Stream)!=1) 
                { 
                       free(szBuffer); fclose(Stream); 
                       printf(" File read error - %s\n",argv[1]); 
                       return -1; 
                } 

               // R2 - Smart attack switch? 
               if(argc==3) 
                if(!strcmpi(argv[2],"-smart")) 
                   nSmart = 1; 

               for(nKey=1;nKey<256;nKey++) 
                { 
                       pszCB = _CeasarV2(szBuffer,lLen,nKey); 
                       if(nSmart) 
                        { 
                               Scores[nKey-1].nScore = _Score(pszCB,lLen); 
                               Scores[nKey-1].nKey = nKey; 
                        } 
                       else 
                        printf("KEY:%d\n%s\n",nKey,pszCB); 
                       free(pszCB); 
                } 

               if(nSmart) 
                { 
                       // R2 - Sort Smart attack results.. 
                       qsort(&Scores,256,sizeof(_TScores),_QSRT); 

                       // R2 - Anything? 
                       if(Scores[0].nScore) 
                        { 
                               // R2 - Display key with highest score.. 
                               pszCB = _CeasarV2(szBuffer,lLen,Scores[0].nKey); 
                               printf("KEY:%d SCORE:%d\n%s\n",Scores[0].nKey,Scores[0].nScore,pszCB); 
                               free(pszCB); 
                        } 
                       else 
            printf(" Smart attack failed!\n"); 
                } 
                 
            free(szBuffer); 
    } 

   return 0; 
} 
//--------------------------------------------------------------------------- 
char    *_CeasarV2(char *pszPlaintext,long nLen,int nKey) 
{ 
   int        nCharIdx; 
   char *pszCBuffer = NULL; 

   if((pszCBuffer=malloc(nLen+1))!=NULL) 
    { 
        memset(pszCBuffer,0,nLen+1); 
        memcpy(pszCBuffer,pszPlaintext,nLen); 
    } 

   for(nCharIdx=0;nCharIdx<strlen(pszCBuffer);nCharIdx++) 
    pszCBuffer[nCharIdx]-=nKey; 

   return    pszCBuffer; 
} 

int         _Score(char *pszBuffer,long nLen) 
{ 
   static char *pszWords[77] = { 
       "the","of","to","and","a","in","is","it", 
       "you","that","he","was","for","on","are", 
       "with","as","I","his","they","be","at", 
       "one","have","this","from","or","had", 
       "by","hot","word","but","what","some", 
       "we","can","out","other","were","all", 
       "there","when","up","use","your","how", 
       "said","an","each","she","which","do", 
       "their","time","if","will","way","about", 
       "many","then","them","write","would", 
       "like","so","her","long","make","thing", 
       "see","him","two","has","look","more", 
       "day","could" }, 
       *pszWBuffer = NULL, 
       *pszToken = NULL; 

   int        nScore = 0, nWordIdx; 

   if((pszWBuffer=malloc(nLen+1))==NULL) 
    return -1; 
   memset(pszWBuffer,0,nLen+1); 
   memcpy(pszWBuffer,pszBuffer,nLen); 

   if((pszToken=strtok(pszWBuffer," "))!=NULL) 
    { 
           do{ 
                   for(nWordIdx=0;nWordIdx<77;nWordIdx++) 
                    { 
                           if(!strcmpi(pszToken,pszWords[nWordIdx])) 
                            nScore+=78-nWordIdx; 
                    } 
               }while((pszToken=strtok(NULL," "))!=NULL); 
    } 

   free(pszWBuffer); 

   return nScore; 
} 

int         _QSRT (const void *A,const void * 
{ 
   _TScores    *ptrA = (_TScores*)A,*ptrB = (_TScores*)B; 

   if(ptrA->nScore>ptrB->nScore) return -1; 
   if(ptrA->nScore<ptrB->nScore) return 1; 
   return 0; 
} 

 

Υ.Γ.

1. Η αλλαγή του Chiossif στον αρχικό κώδικα ήταν πολύ έξυπνη & πετυχημένη.. -είναι εκπληκτικό τι μπορεί να κάνουν οι ρουτίνες του stdio.h !! ;)

 

2. Άραγε υπάρχει πουθενά ανάλογη λίστα με την συχνότητα των ελληνικών λέξεων;

 

3. Θα σπάσει πότε το Voynich Manuscript :-p

[/quote']

. . . . . . .

 

Από paulogiann την 28/01/2007 - 14:26

 

Μια ερώτηση από μένα' date=' πώς προκύπτει οτι ο πληθάριθμος του Key Space είναι 256?

[/quote']

. . . . . . .

 

Από Pablo_Hasan την 28/01/2007 - 14:31

 

απο το ascii

. . . . . . .

 

Από chiossif την 28/01/2007 - 17:15

 

Φϊλε directx' date='

 

υλοποίησες την "μικτή" ιδέα με τον καλύτερο τρόπο. Δεν πρόλαβα να δοκιμάσω τον νέο κώδικα (βιάστηκα να απαντήσω) αλλά να είσαι σίγουρος πως αν βρώ κάτι θα το γράψω.

 

Υ.Γ.

1. Η αλλαγή του Chiossif στον αρχικό κώδικα ήταν πολύ έξυπνη & πετυχημένη.. -είναι εκπληκτικό τι μπορεί να κάνουν οι ρουτίνες του stdio.h !! ;)

 

2. Άραγε υπάρχει πουθενά ανάλογη λίστα με την συχνότητα των ελληνικών λέξεων;

 

3. Θα σπάσει πότε το Voynich Manuscript :-p

 

1. Ευχαριστώ για την φιλοφρόνηση αλλά δεν την αξίζω. Κάπου το βρήκα γραμμένο και το αντέγραψα. Άλλωστε δεν είναι κακό (επιβάλλεται θα έλεγα) να αντιγράφεις ελεύθερα κάτι πράγματι ελεύθερο (και όχι απλώς τζάμπα) ιδιαίτερα όταν το κατανοείς και είσαι σε θέση να το αξιοποιήσεις.

 

2. Οι K&R απαντούν σε αυτό σου το ερώτημα στο έκτο τους κεφάλαιο τους (μια από τις πιο αγαπημένες μου παραγράφους) 6.5 Αυτοαναφορικές δομές. Δεν έχεις παρά να το διαβάσεις και να το εφαρμόσεις σε ένα "μεγάλο" Ελληνικό (μήπως πρέπει να βάλω και εδώ εισαγωγικά; ) κείμενο και έτσι να πάρεις μια πρώτη προσέγγιση-ιδέα. (Εδώ που τα λέμε δεν αξιολογώ και με άριστα αυτήν την ιστοσελίδα που έστειλα απλώς βγήκε πρώτη, απαντούσε στο πρόβλημα και η λύση δεν φαίνεται λάθος.) (Μήπως τώρα έχεις να λύσεις και το πρόβλημα της κωδικοποίησης των ελληνικών χαρακτήρων; )

 

3. Σίγουρα, αν συνεχίσεις έτσι, έχεις πολύ περισσότερες ελπίδες από πολλούς άλλους. Άρα keep on coding...

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Φίλε directx,

 

ευχαριστούμε

για τον χρόνο σου και την ακριβή αντιγραφή των μυνημάτων μας (για τα δικά μου τουλάχιστον).

Αλήθεια τα αποθήκευες κάπου; Από που προέκυψαν τα αντίγραφα;

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Επισυνάπτω τον κώδικα που είχα δημοσιεύσει για frequency analysis. Τρέχετε το εκτελέσιμο με όρισμα το αρχείο που περιέχει το ciphertext.

ceas_cryptanalysis.txt

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

basika iparxei allos kaliteros tropos gia auto to thema. bgazeis ti sixnotita ton grammaton tou kriptografimenou keimenou kai sigkrineis me tis sixnotites ton grammaton tou agglikou alfabitou. iparxei mia analogia metaksi tous kai etsi briskeis to kleidi kai to apokriptografeis. auti i texniki einai gia tin monoalfabitiki kriptografisi.

 

Provided the message is of reasonable length (see below), the cryptanalyst can deduce the probable meaning of the most common symbols by analysing the frequency distribution of the ciphertext—frequency analysis

 

http://en.wikipedia.org/wiki/Monoalphabetic_substitution_cipher

 

http://en.wikipedia.org/wiki/Letter_frequencies

 

Episis na po oti oi sixnotites ton grammaton xrisimopoiountai kai se methodous simpiesis.

 

PS: To troxo tis tixis ton thimatai kanenas? Paizame me kati paidia wheel of fortune sta msn games kai oi sixnotites boithane ;)

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

basika iparxei allos kaliteros tropos gia auto to thema. bgazeis ti sixnotita ton grammaton tou kriptografimenou keimenou kai sigkrineis me tis sixnotites ton grammaton tou agglikou alfabitou. iparxei mia analogia metaksi tous kai etsi briskeis to kleidi kai to apokriptografeis. auti i texniki einai gia tin monoalfabitiki kriptografisi....

QUOTE]

Η κρυπτανάλυση κειμένου μονοαλφαβιτικής υποκατάστασης αντιμετωπίζεται με μεγάλη επιτυχία με τον παραπάνω τρόπο.

Ωστόσο η αντιστοίχιση συχνοτήτων στο κρυπτοσύστημα του Κέσαρα είναι χάσιμο χρόνου.

Ειδικά αν σκεφτείς οτι τα σύμβολα προς αποκρυπτογράφιση είναι πολύ περισσότερα από τα γράμματα του αλφαβήτου

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Katarxin i monoalfabitikes kriptografiseis den periexoun allous xaraktires para mono grammata. giauto to logo kai ginetai xrisi ton sixnotiton ton grammaton.

 

I xrisi olon ton xaraktiron ascii den antixtoixi se auto to motibo.

 

Episis an exoume tetoio motibo i xrisi ton sixnotiton einai pio grigori apo tin parapano methodo giati kapoios koitaei mia fora tis sixnotites tou kriptografimatos kai briskei to kleidi. De xreiazetai na treksei ton algorithmo kai gia ta 256 kleidia kai meta na taksinomisei ta apotelesmata me basi to pososto ton pio koinon emfanizomenon lekseon.

 

Alla kai me ti xrisi ton sixnotiton pali briskeis to kleidi gia ton aploustato logo oti an to A exei ti megaliteri sixnotita tote to simbolo pou tha antistoixei sti megaliteri sixnotita tha anikei sto A. Opote eite mono ta grammata na pareis eite ola ta simbola tou ASCII 256 stis monoalfabitikes kriptografiseis ta RATIOS paramenoun ametablita.

 

Skepsou to apla. ta 26 grammata tou alfabitou tha ginoun mapping se 26 simbola apo ta 256 tou ASCII. Ta 26 simbola tha exoun tis idies sixnotites peripou me auta ton 26 grammaton. Ta ipoloipa 230 simbola tha einai miden. Ara kathe fora tha taksinomeis 26 simbola.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Ο τρόπος που περιγράφεις χάνει πολύ σε efficiency στην περίπτωση του Κέσαρα.

Ο κώδικας που έχω δώσει κάνει ανάλυση συχνοτήτων, δεν κάνει όμως ένα προς ένα αντιστοίχιση.

Είναι πιο θεμιτό να βρεις το σύμβολο με τη μεγαλύτερη συχνότητα και να υποθέσεις οτι είναι το 'e' (το πιο συχνό γράμμα). Αυτόματα υποθέτεις και τον αριθμό των διαδοχικών ολισθήσεων του κρυπτογράμματος. Αν αποτύχεις, δοκιμάζεις με το επόμενο πιο συχνά εμφανιζόμενο χαρακτήρα.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Ο τρόπος που περιγράφεις χάνει πολύ σε efficiency στην περίπτωση του Κέσαρα.

Ο κώδικας που έχω δώσει κάνει ανάλυση συχνοτήτων, δεν κάνει όμως ένα προς ένα αντιστοίχιση.

Είναι πιο θεμιτό να βρεις το σύμβολο με τη μεγαλύτερη συχνότητα και να υποθέσεις οτι είναι το 'e' (το πιο συχνό γράμμα). Αυτόματα υποθέτεις και τον αριθμό των διαδοχικών ολισθήσεων του κρυπτογράμματος. Αν αποτύχεις, δοκιμάζεις με το επόμενο πιο συχνά εμφανιζόμενο χαρακτήρα.

 

ma gia na breis to simbolo me ti megaliteri sixnotita prepei na breis ti sixnotita kai ton 26 simbolon afou de ksereis me pio simbolo tha antistoixithei. Einai auto pou perigrafo proigoumenos. O kodikas sou kanei analisi sixnotiton me basi kapoion lekseon to opoio den einai toso aksiopisto oso me ta grammata. Me ta grammata exeis 100% epitixia.

 

Apo efficiency de xanei giati kaneis mia fora euresi ton sixnotiton elegxontas tous 256 xaraktires pano sto kriptografima. Exeis 256 sigkriseis. Me to diko sou tropo tha ekteleseis 256 fores to programma kai tha kaneis kai ti sigkrisi ton 70 lekseon kathe fora.

 

PS: ton 25 simbolon giati to 26 bgainei apo tin afairesi 1-(sixnotita ton 25) afou to sum olon ton sixnotiton kanei 1

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

ma gia na breis to simbolo me ti megaliteri sixnotita prepei na breis ti sixnotita kai ton 26 simbolon afou de ksereis me pio simbolo tha antistoixithei. Einai auto pou perigrafo proigoumenos. O kodikas sou kanei analisi sixnotiton me basi kapoion lekseon to opoio den einai toso aksiopisto oso me ta grammata. Me ta grammata exeis 100% epitixia.

 

Apo efficiency de xanei giati kaneis mia fora euresi ton sixnotiton elegxontas tous 256 xaraktires pano sto kriptografima. Exeis 256 sigkriseis. Me to diko sou tropo tha ekteleseis 256 fores to programma kai tha kaneis kai ti sigkrisi ton 70 lekseon.

Δεν είναι ο κώδικάς μου αυτός που κοιτάς.

Ανάλυση συχνοτήτων το λέω οτι κάνω. δεν κάνω όμως και ένα προς ένα αντιστοίχιση συχνοτήτων. Αρκεί να βρω τη μεγαλύτερη. Έτσι η μέση πολυπλοκότητα πέφτει κατα πολύ.

EDIT:Οι αντιχτοιχίσεις είναι 256. Οι συγκρίσεις για το sortάρισμα είναι αρκετά περισσότερες

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Nai lathos. Omos den einai gia kathe xaraktira 256. Molis anagnoristoun kai ta 25 simbola tote oi sigkriseis apo ekei kai istera einai 25. Auto einai tweak. ara kata meso oro oi sigkriseis einai 25 se ena megalo keimeno gia kathe xaraktira.

 

Basika bazeis kapoia oria. Afou ta grammata tou alfabitou einai mesa se ena euros 25 timon molis breis to proto simbolo psaxneis gia to antistoixo euros +-25 giati de ksereis an auto einai to a i to z. opote kaneis gia kathe xaraktira 50 sigkriseis kai meioneis kathe fora pou briskeis ena simbolo.

 

Koitas gia to pio simbolo tha bgalei sixnotita konta sto 12% kai stamatas ton algorithmo. Alla oi sixnotites auksanontai gia kathe simbolo pou briskeis real time. Prepei na elegkseis olo to kriptografima gia na deis tis sixnotites olokliromenes. Ara prepei na deis tis sixnotites kai ton 25 grammaton.

 

I antistoixisi ton sixnotiton den einai aparaititi alla de xaneis kati. I oli douleia einai na breis tis sixnotites ton grammaton. Auto epireazei to efficiency kai einai aparairatito na breis oles tis sixnotites. Ara idia pliplokotita tha exei

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.


  • Δημιουργία νέου...