Στο συγκεκριμένο δεν μπορούμε.
Με τους πίνακες που είχα ποστάρει πριν φύγω για διακοπές έχει ασχοληθεί κανείς; Υπάρχει ενδιαφέρον για συνέχεια; viewtopic.php?p=202666#p202666
Συντονιστής: konnn

Star_Light έγραψε:ΕΓω στις διακοπές σκέφτηκα πως θα ήταν φοβερο να μπορέσω να φτιάξω ενα πρόγραμμα κρυπτογράφησης σε C είτε του stdin είτε κάποιου άλλου αρχείου. Μιας και τα strings τα έχουμε έτοιμα. Θα πρέπει να φτιάξω μια συναρτηση cypher η οποία θα κάνει ολη την δουλειά και να εισάγω και ένα κλειδί μέσα. Πιστευω ειναι πολυ καλη ιδέα εσεις τι λέτε?
Για αρχή ας πούμε μπορεί ο χρήστης να δίνει την φράση
"hello friend"
και το πρόγραμμα να τυπώνει στην οθόνη
"ehlol rfeidn" δηλαδη θα κάνει μια αντιμετάθεση των στοιχείων ενος πίνακα.
Το ενα θα μπαίνει στην θέση του άλλου (φυσικά εδω δεν χρειάζεται κλειδί)
θα σκεφτω πως μπορω να το υλοποιησω και μονος μου... σκεφτείτε να φτιάξετε ενα ωραιο δικο σας προγραμματακι σε C το οποιο θα κρυπτογραφεί ένα αρχείο κειμένου πριν το στείλετε καπου... ειναι σαν να τρως λαχανικά απο τον κήπο σου!!!!!!!!!![]()
![]()
#include <stdio.h>
// ----------------------------------------------------------------------------------------
char *cipher( char *s )
{
if ( !s )
return NULL;
char *cp = s;
while( *s )
*s++ ^= 13;
return cp;
}
// ----------------------------------------------------------------------------------------
int main( void )
{
char s[] = "This is a test for (dummy) ciphering. / Παράδειγμα (χαζής) κρυπτογράφησης.";
printf("Original:\n%s\n\n", s);
printf("Ciphered:\n%s\n\n", cipher( s ) );
printf("DeCiphered:\n%s\n\n", cipher( s ) );
return 0;
}

migf1 έγραψε:Star_Light έγραψε:ΕΓω στις διακοπές σκέφτηκα πως θα ήταν φοβερο να μπορέσω να φτιάξω ενα πρόγραμμα κρυπτογράφησης σε C είτε του stdin είτε κάποιου άλλου αρχείου. Μιας και τα strings τα έχουμε έτοιμα. Θα πρέπει να φτιάξω μια συναρτηση cypher η οποία θα κάνει ολη την δουλειά και να εισάγω και ένα κλειδί μέσα. Πιστευω ειναι πολυ καλη ιδέα εσεις τι λέτε?
Για αρχή ας πούμε μπορεί ο χρήστης να δίνει την φράση
"hello friend"
και το πρόγραμμα να τυπώνει στην οθόνη
"ehlol rfeidn" δηλαδη θα κάνει μια αντιμετάθεση των στοιχείων ενος πίνακα.
Το ενα θα μπαίνει στην θέση του άλλου (φυσικά εδω δεν χρειάζεται κλειδί)
θα σκεφτω πως μπορω να το υλοποιησω και μονος μου... σκεφτείτε να φτιάξετε ενα ωραιο δικο σας προγραμματακι σε C το οποιο θα κρυπτογραφεί ένα αρχείο κειμένου πριν το στείλετε καπου... ειναι σαν να τρως λαχανικά απο τον κήπο σου!!!!!!!!!![]()
![]()
- Κώδικας: Επιλογή όλων
#include <stdio.h>
// ----------------------------------------------------------------------------------------
char *cipher( char *s )
{
if ( !s )
return NULL;
char *cp = s;
while( *s )
*s++ ^= 13;
return cp;
}
// ----------------------------------------------------------------------------------------
int main( void )
{
char s[] = "This is a test for (dummy) ciphering. / Παράδειγμα (χαζής) κρυπτογράφησης.";
printf("Original:\n%s\n\n", s);
printf("Ciphered:\n%s\n\n", cipher( s ) );
printf("DeCiphered:\n%s\n\n", cipher( s ) );
return;
}
Απλή αντικατάσταση κάθε χαρακτήρα του s με τον χαρακτήρα που προκύπτει όταν κάνουμε XOR τον αυθεντικό με μια τιμή (έβαλα 13 εγώ). Εφαρμόζοντας ξανά το ίδιο XOR επανέρχονται στην αυθεντική τους τιμή. Προφανώς δεν πρόκειται για σοβαρή κρυπτογράφηση, εξού και το "dummy cipher" στον κώδικα
Όποιος θέλει μπορεί να δοκιμάσει να φτιάξει το (εξίσου χαζό) ROT13 ciphering: http://en.wikipedia.org/wiki/ROT13

#include <stdio.h>
#define ALPHA "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
#define ALPHA13 "NOPQRSTUVWXYZABCDEFGHIJKLMnopqrstuvwxyzabcdefghijklm"
// ----------------------------------------------------------------------------------------
char c_rot13( const char c, const char *alpha, const char *alpha13 )
{
register int i;
for ( i=0; alpha[i]; i++ )
if ( c == alpha[i] )
return alpha13[i];
return '\0';
}
// ----------------------------------------------------------------------------------------
char *s_rot13( char *s )
{
if ( !s )
return NULL;
char c, *cp = s;
for(; *s; s++ )
*s = (c=c_rot13(*s, ALPHA, ALPHA13)) != '\0' ? c : *s;
return cp;
}
// ----------------------------------------------------------------------------------------
int main( void )
{
char s[] = "This is a test for (dummy) ROT13 ciphering.";
printf("Original:\n%s\n\n", s);
printf("Ciphered:\n%s\n\n", s_rot13( s ) );
printf("DeCiphered:\n%s\n\n", s_rot13( s ) );
return 0;
}



migf1 έγραψε:Στο συγκεκριμένο δεν μπορούμε.
Με τους πίνακες που είχα ποστάρει πριν φύγω για διακοπές έχει ασχοληθεί κανείς; Υπάρχει ενδιαφέρον για συνέχεια; viewtopic.php?p=202666#p202666


stamatiou έγραψε:Στο cipher το cp τι το θέλουμε;
έγραψε:Edit: Προσπάθησα να φτιάξω και την συνάρτηση αποκρυπτογράφησης και να τα ενώσω σε ένα αλλά όταν ζητά το κείμενο πάει αμέσως μετά στο κλειδί και συνεχίζει να ζητά το κλειδί μέχρι να δώσω 0, μετά δεν εκτυπώνει το κείμενο

Star_Light έγραψε:Λοιπον πρωτα εκατσα να ξαναθυμηθω την XOR . Και πηγα να την υλοποιησω προχειρα στον κωδικα
αλλα δεν μου βγαζει ας πουμε καλα αποτελεσματα.... μου βγαζει απο αριστερα δεκαδικη τιμη και απο δεξια δυαδικη κατι παιζει
με την μορφοποιηση μεσα στην printf :/Spoiler: show
γιατι? :S τα 0 και 1 τι μορφοποιητη θελουν πχ για να εκτυπωθουν?
Π.Σ αμα απο το XOR του x με το y έχεις βγαλει ενα z τοτε μετα αν πχ πας να κανεις XOR το x με το z παιρνεις το y κτλπ! Αυτο για οσους θελουν να ξαναθυμηθουν τα XORakia
#include <stdio.h>
#define XOR_KEY 0x13
#define ALPHA "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\
ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩαβγδεζηθικλμνξοπρστυφχψω"
#define ALPHA13 "NOPQRSTUVWXYZABCDEFGHIJKLMnopqrstuvwxyzabcdefghijklm\
ΝΞΟΠΡΣΤΥΦΧΨΩΑΒΓΔΕΖΗΘΙΚΛΜνξοπρστυφχψωαβγδεζηθικλμ"
//--------------------------------------------------------------------------------------
char c_rot13( const char c, const char *alpha, const char *alpha13 )
{
register int i;
for ( i=0; alpha[i]; i++ )
if ( c == alpha[i] )
return alpha13[i];
return '\0';
}
//--------------------------------------------------------------------------------------
char *s_rot13( char *s )
{
if ( !s )
return NULL;
char c, *cp = s;
for(; *s; s++ )
*s = (c=c_rot13(*s, ALPHA, ALPHA13)) != '\0' ? c : *s;
return cp;
}
//--------------------------------------------------------------------------------------
char *s_xor( char *s, const int key )
{
if ( !s )
return NULL;
char *cp = s;
while( *s )
*s++ ^= key;
return cp;
}
//--------------------------------------------------------------------------------------
void print_header( const char *title, const char *text )
{
printf("%74s\n", title);
puts("--------------------------------------------------------------------------");
puts( text );
puts("--------------------------------------------------------------------------\n");
return;
}
//--------------------------------------------------------------------------------------
int main( void )
{
char s[] = "This is a test for (dummy) ciphering. / Παράδειγμα (χαζής) κρυπτογράφησης.";
puts("D U M M Y C I P H E R\n");
print_header( "U s i n g X O R", s );
printf("C I P H E R E D:\n%s\n\n", s_xor( s, XOR_KEY ) ); // cipher & print
printf("D E C I P H E R E D:\n%s\n\n", s_xor( s, XOR_KEY ) ); // decipher & print
print_header( "U s i n g R O T 1 3", s );
printf("C I P H E R E D:\n%s\n\n", s_rot13( s ) ); // cipher & print
printf("D E C I P H E R E D:\n%s\n\n", s_rot13( s ) ); // decipher & print
return 0;
}
