Kontrolne sume u Javi

Java Top

Upravo sam najavio novo Uči proljeće tečaj, usredotočen na osnove Spring 5 i Spring Boot 2:

>> PROVJERITE TEČAJ

1. Pregled

U ovom mini-članku pružit ćemo kratko objašnjenje što su kontrolne sume i pokazati kako neke koristiti Ugrađene Java značajke za izračunavanje kontrolnih suma.

2. Kontrolne sume i uobičajeni algoritmi

U srži, kontrolna suma je umanjeni prikaz binarnog toka podataka.

Kontrolne se sume obično koriste za mrežno programiranje kako bi se provjerilo je li primljena cjelovita poruka. Nakon primanja nove poruke, kontrolna se suma može ponovno izračunati i usporediti s primljenom kontrolnom sumom kako bi se osiguralo da nisu izgubljeni bitovi. Uz to, oni mogu biti korisni i za upravljanje datotekama, na primjer, za usporedbu datoteka ili otkrivanje promjena.

Postoji nekoliko uobičajenih algoritama za stvaranje kontrolnih suma, poput Adler32 i CRC32. Ti algoritmi djeluju pretvaranjem niza podataka ili bajtova u puno manji slijed slova i brojeva. Dizajnirani su tako da će svaka mala promjena na ulazu rezultirati znatno drugačijom izračunatom kontrolnom sumom.

Pogledajmo Javinu podršku za CRC32. Imajte na umu da, iako CRC32 može biti koristan za kontrolne sume, ne preporučuje se za sigurne operacije, poput hashiranja lozinke.

3. Kontrolna suma iz niza ili bajt polja

Prvo što moramo učiniti je dobiti ulazne podatke za algoritam kontrolne sume.

Ako započinjemo s Niz, možemo koristiti getBytes () metoda za dobivanje bajt polja iz a Niz:

String test = "test"; bajt [] bajtova = test.getBytes ();

Dalje, možemo izračunati kontrolnu sumu pomoću bajt polja:

javni statički long getCRC32Checksum (bajt [] bajtova) {Kontrolni zbroj crc32 = novi CRC32 (); crc32.update (bajtovi, 0, bajtovi.dužina); vrati crc32.getValue (); }

Ovdje koristimo ugrađenu Javu CRC32 razred. Nakon što se klasa instancira, koristimo ažuriranje metoda za ažuriranje Kontrolna suma primjer s bajtovima iz ulaza.

Jednostavno rečeno, ažuriranje metoda zamjenjuje bajtove koje drži CRC32Objekt - ovo pomaže kod ponovne upotrebe koda i negira potrebu za stvaranjem novih primjeraka Kontrolna suma. The CRC32 klasa pruža nekoliko nadjačanih metoda koje zamjenjuju ili cijeli bajtni niz ili nekoliko bajtova unutar njega.

Napokon, nakon postavljanja bajtova, izvozimo kontrolnu sumu s getValue metoda.

4. Kontrolna suma iz InputStream

Kad se bave s većim skupovima podataka binarnih podataka, gornji pristup ne bi bio vrlo memorijski učinkovit jer se svaki bajt učita u memoriju.

Kad imamo InputStream, možemo se odlučiti za upotrebu Provjereno Ulazni tok za stvaranje naše kontrolne sume. Korištenjem ovog pristupa možemo definirati koliko se bajtova istovremeno obrađuje.

U ovom primjeru obrađujemo određenu količinu bajtova u trenutku dok ne dođemo do kraja toka.

Vrijednost kontrolne sume tada je dostupna na Provjereno Ulazni tok:

javni statički long getChecksumCRC32 (InputStream stream, int bufferSize) baca IOException {CheckedInputStream checkedInputStream = new CheckedInputStream (stream, new CRC32 ()); bajt [] međuspremnik = novi bajt [bufferSize]; while (checkedInputStream.read (buffer, 0, buffer.length)> = 0) {} return checkedInputStream.getChecksum (). getValue (); }

5. Zaključak

U ovom uputstvu gledamo kako generirati kontrolne sume iz bajtnih nizova i InputStreams pomoću Java CRC32 podrške.

Kao i uvijek, kôd je dostupan na GitHub-u.

Dno Java

Upravo sam najavio novo Uči proljeće tečaj, usredotočen na osnove Spring 5 i Spring Boot 2:

>> PROVJERITE TEČAJ