Kontrolné súčty v Jave

Java Top

Práve som oznámil nové Naučte sa jar kurz zameraný na základy jari 5 a Spring Boot 2:

>> SKONTROLUJTE KURZ

1. Prehľad

V tomto mini článku poskytneme stručné vysvetlenie toho, čo sú kontrolné súčty, a ukážeme, ako niektoré z nich používať Vstavané funkcie Java na výpočet kontrolných súčtov.

2. Kontrolné súčty a bežné algoritmy

V podstate kontrolný súčet je minimalizovaná reprezentácia binárneho toku údajov.

Kontrolné súčty sa bežne používajú na programovanie v sieti s cieľom skontrolovať, či bola prijatá úplná správa. Po prijatí novej správy môže byť kontrolný súčet prepočítaný a porovnaný s prijatým kontrolným súčtom, aby sa zabezpečilo, že nedošlo k strate bitov. Môžu byť tiež užitočné na správu súborov, napríklad na porovnanie súborov alebo na zisťovanie zmien.

Existuje niekoľko bežných algoritmov na vytváranie kontrolných súčtov, napríklad Adler32 a CRC32. Tieto algoritmy fungujú tak, že prevádzajú postupnosť údajov alebo bajtov na oveľa menšiu postupnosť písmen a čísel. Sú navrhnuté tak, aby každá malá zmena vo vstupe mala za následok výrazne odlišný vypočítaný kontrolný súčet.

Pozrime sa na podporu Java pre CRC32. Upozorňujeme, že hoci CRC32 môže byť užitočný pre kontrolné súčty, pre bezpečné operácie, ako je napríklad hašovanie hesla, sa to neodporúča.

3. Kontrolný súčet z reťazca alebo bajtov

Prvá vec, ktorú musíme urobiť, je získať vstup do algoritmu kontrolného súčtu.

Ak začíname s String, môžeme použiť getBytes () metóda na získanie bajtového poľa z a String:

Skúška reťazcom = "skúška"; byte [] bytes = test.getBytes ();

Ďalej môžeme vypočítať kontrolný súčet pomocou bajtového poľa:

public static long getCRC32Checksum (byte [] bytes) {Checksum crc32 = new CRC32 (); crc32.update (bajty, 0, bajty.dĺžka); návrat crc32.getValue (); }

Tu používame zabudovanú Java CRC32 trieda. Po vytvorení inštancie triedy použijeme aktualizovať metóda aktualizácie Kontrolný súčet napríklad s bajtami zo vstupu.

Jednoducho povedané aktualizovať metóda nahrádza bajty držané CRC32Objekt - to pomáha pri opätovnom použití kódu a vylučuje potrebu vytvárať nové inštancie Kontrolný súčet The CRC32 trieda poskytuje niekoľko prepísaných metód na nahradenie buď celého bajtového poľa, alebo niekoľkých bajtov v ňom.

Nakoniec po nastavení bajtov, exportujeme kontrolný súčet s getValue metóda.

4. Kontrolný súčet z an InputStream

Pri jednaní s väčšími množinami údajov binárnych údajov by vyššie uvedený prístup nebol veľmi pamäťovo efektívny, pretože každý bajt je načítaný do pamäte.

Keď máme InputStreamsa môžeme rozhodnúť použiť CheckedInputStream aby sme vytvorili náš kontrolný súčet. Použitím tohto prístupu môžeme definovať, koľko bajtov sa spracuje naraz.

V tomto príklade spracovávame dané množstvo bajtov v čase, kým sa nedostaneme na koniec toku.

Hodnota kontrolného súčtu je potom k dispozícii na internetovej stránke CheckedInputStream:

public static long getChecksumCRC32 (InputStream stream, int bufferSize) hodí IOException {CheckedInputStream checkedInputStream = new CheckedInputStream (stream, new CRC32 ()); byte [] buffer = nový bajt [bufferSize]; while (checkedInputStream.read (buffer, 0, buffer.length)> = 0) {} return checkedInputStream.getChecksum (). getValue (); }

5. Záver

V tomto výučbe sa pozrieme na to, ako generovať kontrolné súčty z bajtových polí a InputStreams pomocou podpory Java CRC32.

Ako vždy, kód je k dispozícii na GitHub.

Java dole

Práve som oznámil nové Naučte sa jar kurz zameraný na základy jari 5 a Spring Boot 2:

>> SKONTROLUJTE KURZ