gkastros Δημοσ. 2 Ιουνίου 2010 Δημοσ. 2 Ιουνίου 2010 Προσπαθω να καταλαβω το παρακατω Block κωδικα void * crypt (void * buffer, unsigned len,void const * key, unsigned keyLen) { void * result = buffer; unsigned long seed = 0L; unsigned i = 0; if ( len && keyLen ) { do { seed = seed * 0x343FDL + 0x269EC3L; *(byte *) buffer = *(byte *) buffer ^ ((byte *) key) ^ ((byte *) &seed)[0] ^ ((byte *) &seed)[1] ^ ((byte *) &seed)[2] ^ ((byte *) &seed)[3]; i = (i + 1) % keyLen; (byte *) buffer += 1; } while ( --len ); } return result; } Μεχρι στιγμης καταλαβαινω πως περνει ενα String Και ενα Key Και κανει προσθεση στα Butes του String αυτα του KEy.... (Confirm pls) AΑυτο που με μπερδευει ειναι το seed = seed * 0x343FDL + 0x269EC3L; 1. δεν μπορω να καταλαβω την πραξη 2, δεν μπορω να καταλαβω τι τιμη εχει το Seed κατα το πρωτο Iteration 3, Γιατι το 0x343FDL εχει 5 αριθμους και L στο τελος ενω το 2ο εχει 6 και L Ευχαριστω προκαταβολικα
parsifal Δημοσ. 2 Ιουνίου 2010 Δημοσ. 2 Ιουνίου 2010 Χμμ, δεν κάνει απλά «πρόσθεση στα bytes του string αυτά του key». Ένα σωρό bitwise XORs γίνονται και εμπλέκονται και τα bytes του φύτρου (seed) μέσα. Στο πρώτο iteration, επειδή το seed έχει αρχικοποιηθεί σε 0, η τιμή που παίρνει μετά την εκτέλεση της πράξης προφανώς είναι η 0x269EC3 ή 2531011 αν προτιμάς σε δεκαδικό. To L στο τέλος των δύο literal constants είναι ένα type suffix και δηλώνει ότι ο αριθμός είναι τύπου long.
gkastros Δημοσ. 2 Ιουνίου 2010 Μέλος Δημοσ. 2 Ιουνίου 2010 seed * 0x343FDL + 0x269EC3L; Εδω γινεται καποια πραξη??? Πως μτατρεπεις το 0x343FDL σε δεκαδικο??
parsifal Δημοσ. 2 Ιουνίου 2010 Δημοσ. 2 Ιουνίου 2010 seed * 0x343FDL + 0x269EC3L;Εδω γινεται καποια πραξη??? Εμ, δε γίνεται; Για την ακρίβεια, η εντολή ολόκληρη είναι: >seed = seed * 0x343FDL + 0x269EC3L; Άρα, η πράξη είναι «δώσε νέα τιμή στη μεταβλητή seed, ίση με το γινόμενο της τρέχουσας τιμής της επί τον αριθμό 0x343FD, συν τον αριθμό 0x269EC3». Πως μτατρεπεις το 0x343FDL σε δεκαδικο?? Με ένα επιστημονικό κομπιουτεράκι, πραγματικό ή σε software μορφή (π.χ. το Calculator των Windows υποστηρίζει μετατροπή από δεκαεξαδικό σε δεκαδικό).
gkastros Δημοσ. 3 Ιουνίου 2010 Μέλος Δημοσ. 3 Ιουνίου 2010 Σε δεκαδικο η πραξη ειναι η παρακατω seed = seed * 214013 + 2531011 Δεδομενου οτι μπορει να γινουν μεχρι και 25 iterations κατι δεν μου παει καλα... Με Uint64 σε vb με πανω απο 3 iterations Μου βγαζει overflow
bxenos Δημοσ. 3 Ιουνίου 2010 Δημοσ. 3 Ιουνίου 2010 Δεν πειράζει να κάνει overflow. Δεν αλλιώνει τα δεδομένα, είναι μέρος του κλειδιού.
gkastros Δημοσ. 3 Ιουνίου 2010 Μέλος Δημοσ. 3 Ιουνίου 2010 Στη VB πως μπορω να το αναπαραγω??? Το Overflow Μηδενιζει τον αριθμο??
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.