Cryptography Skrevet 25. august 2008 Del Skrevet 25. august 2008 Heisann.. Noen som kan hjelpe meg med å forstå hvordan selve utregningen i dette Perl-scriptet foregår? sub toled { my $page = shift; my $str = shift; # calculate checksum my $checksum = 0x74; for (0..length($str)-1) { my $c = ord(substr($str,$_)); $checksum = $checksum ^ $c; } # construct basic "display this on page $page" message my $ledcode = sprintf("<ID00><L1><P%s><FE><MA><WC><FE>%s%02X<E>", uc($page), $str, $checksum); # send to serial device /dev/ttyS0 open SERIAL, ">/dev/ttyS0"; print SERIAL $ledcode; close SERIAL; } For eksempel har man kommet frem til at denne selve teksten i denne linjen her har generert checksumen 4B. <ID00><L1><PA><FE><MA><WC><FE>Text message entered4B<E> Lenke til kommentar
Quai Skrevet 21. desember 2008 Del Skrevet 21. desember 2008 Heisann.. Noen som kan hjelpe meg med å forstå hvordan selve utregningen i dette Perl-scriptet foregår? [...] En checksum brukes ofte for å verifisere at det som tas imot på andre siden er nøyaktig det samme som ble sendt. Denne koden gjør et forsøk på det. Først gir man $checksum en startsum som begge sider er blitt enige om. my $checksum = 0x74; Så går man igjennom hvert enkelt tegn i strengen $str for (0..length($str)-1) { my $c = ord(substr($str,$_)); (ord() gir den numeriske verdien av det første tegnet[1] i det substr() returnerer[2]. Det substr returnerer er alle tegn fra posisjon $_ i strengen $str). Så tar den verdien av tegnet og utfører en XOR-operasjon[3] $checksum = $checksum ^ $c; Når loopen er ferdig står du igjen med et 8bit tall som sendes med kommandoen. Prøver du å sende noe annet, slik som unicode/utf-8 vil dette nok feile, siden nummerverdien for tegn ofte ikke begrenser seg til 8 bit, men det er en helt annen historie. Mulig denne koden, som gjør samme jobb med litt mindre kode, er lettere å forstå; my $checksum = 0x74; foreach my $char (split '', $str) { $checksum ^= ord($char); } [1] http://perldoc.perl.org/functions/ord.html [2] http://perldoc.perl.org/functions/substr.html [3] http://perldoc.perl.org/perlop.html Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå