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

C Crypt Function


gkastros

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

Δημοσ.

Προσπαθω να καταλαβω το παρακατω 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

 

Ευχαριστω προκαταβολικα

Δημοσ.

Χμμ, δεν κάνει απλά «πρόσθεση στα bytes του string αυτά του key». Ένα σωρό bitwise XORs γίνονται και εμπλέκονται και τα bytes του φύτρου (seed) μέσα.

 

Στο πρώτο iteration, επειδή το seed έχει αρχικοποιηθεί σε 0, η τιμή που παίρνει μετά την εκτέλεση της πράξης προφανώς είναι η 0x269EC3 ή 2531011 αν προτιμάς σε δεκαδικό.

 

To L στο τέλος των δύο literal constants είναι ένα type suffix και δηλώνει ότι ο αριθμός είναι τύπου long.

Δημοσ.
seed * 0x343FDL + 0x269EC3L;

Εδω γινεται καποια πραξη???

 

Εμ, δε γίνεται; Για την ακρίβεια, η εντολή ολόκληρη είναι:

>seed = seed * 0x343FDL + 0x269EC3L;

 

Άρα, η πράξη είναι «δώσε νέα τιμή στη μεταβλητή seed, ίση με το γινόμενο της τρέχουσας τιμής της επί τον αριθμό 0x343FD, συν τον αριθμό 0x269EC3».

 

 

Πως μτατρεπεις το 0x343FDL σε δεκαδικο??

 

Με ένα επιστημονικό κομπιουτεράκι, πραγματικό ή σε software μορφή (π.χ. το Calculator των Windows υποστηρίζει μετατροπή από δεκαεξαδικό σε δεκαδικό).

Δημοσ.

Σε δεκαδικο η πραξη ειναι η παρακατω

seed = seed * 214013 + 2531011

Δεδομενου οτι μπορει να γινουν μεχρι και 25 iterations κατι δεν μου παει καλα... Με Uint64 σε vb με πανω απο 3 iterations Μου βγαζει overflow

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

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

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