Sjekksummer i Java

Java Top

Jeg kunngjorde nettopp det nye Lær våren kurs, med fokus på det grunnleggende i vår 5 og vårstøvel 2:

>> KONTROLLER KURSET

1. Oversikt

I denne mini-artikkelen vil vi gi en kort forklaring på hva kontrollsummer er og vise hvordan du bruker noe av Java's innebygde funksjoner for beregning av sjekksummer.

2. Sjekksummer og vanlige algoritmer

I hovedsak, en sjekksum er en minimert representasjon av en binær datastrøm.

Sjekksummer brukes ofte til nettverksprogrammering for å kontrollere at en fullstendig melding er mottatt. Når du mottar en ny melding, kan kontrollsummen beregnes på nytt og sammenlignes med den mottatte kontrollsummen for å sikre at ingen biter har gått tapt. I tillegg kan de også være nyttige for filbehandling, for eksempel for å sammenligne filer eller for å oppdage endringer.

Det er flere vanlige algoritmer for å lage kontrollsummer, for eksempel Adler32 og CRC32. Disse algoritmene fungerer ved å konvertere en sekvens av data eller byte til en mye mindre sekvens av bokstaver og tall. De er utformet slik at enhver liten endring i inngangen vil resultere i en veldig annen beregnet kontrollsum.

La oss ta en titt på Java's støtte for CRC32. Vær oppmerksom på at mens CRC32 kan være nyttig for kontrollsummer, anbefales det ikke for sikre operasjoner, som å hashe et passord.

3. Sjekksum fra en streng eller byteoppstilling

Det første vi trenger å gjøre er å skaffe innspill til sjekksumalgoritmen.

Hvis vi begynner med en String, kan vi bruke getBytes () metode for å få et byteoppsett fra en String:

String test = "test"; byte [] byte = test.getBytes ();

Deretter kan vi beregne kontrollsummen ved hjelp av byte-arrayet:

offentlig statisk lang getCRC32Checksum (byte [] byte) {Checksum crc32 = ny CRC32 (); crc32.update (bytes, 0, bytes.length); returnere crc32.getValue (); }

Her bruker vi Java's innebygde CRC32 klasse. Når klassen er instantiert, bruker vi Oppdater metoden for å oppdatere Sjekksum forekomst med byte fra inngangen.

Enkelt sagt, den Oppdater metoden erstatter byte som holdes av CRC32Gjenstand - dette hjelper med gjenbruk av kode og negerer behovet for å opprette nye forekomster av Sjekksum. De CRC32 klasse gir noen overstyrte metoder for å erstatte enten hele byte-matrisen eller noen få byte i den.

Til slutt, etter å ha satt inn byte, vi eksporterer kontrollsummen med getValue metode.

4. Sjekksum Fra en InputStream

Når du handler med større datasett med binære data, ville fremgangsmåten ovenfor ikke være veldig minneeffektiv da hver byte er lastet inn i minnet.

Når vi har en InputStream, kan vi velge å bruke CheckedInputStream for å lage kontrollsummen vår. Ved å bruke denne tilnærmingen kan vi definere hvor mange byte som behandles samtidig.

I dette eksemplet behandler vi en gitt mengde byte av gangen til vi når slutten av strømmen.

Kontrollsummen er da tilgjengelig fra CheckedInputStream:

offentlig statisk lang getChecksumCRC32 (InputStream stream, int bufferSize) kaster IOException {CheckedInputStream checkedInputStream = ny CheckedInputStream (stream, ny CRC32 ()); byte [] buffer = ny byte [bufferSize]; mens (checkedInputStream.read (buffer, 0, buffer.length)> = 0) {} returnerer checkInputStream.getChecksum (). getValue (); }

5. Konklusjon

I denne opplæringen ser vi på hvordan man genererer sjekksummer fra byte-arrays og InputStreams bruker Java CRC32-støtte.

Som alltid er koden tilgjengelig på GitHub.

Java bunn

Jeg kunngjorde nettopp det nye Lær våren kurs, med fokus på det grunnleggende i vår 5 og vårstøvel 2:

>> KONTROLLER KURSET

$config[zx-auto] not found$config[zx-overlay] not found