Ellenőrző összegek Java-ban

Java Top

Most jelentettem be az újat Tanulj tavaszt tanfolyam, amelynek középpontjában az 5. tavasz és a tavaszi bakancs 2 alapjai állnak:

>> ELLENŐRIZZE A FOLYAMATOT

1. Áttekintés

Ebben a kis cikkben rövid magyarázatot adunk az ellenőrző összegekről, és bemutatjuk, hogyan kell felhasználni néhányat A Java beépített szolgáltatásai az ellenőrző összegek kiszámításához.

2. Ellenőrző összegek és közös algoritmusok

Lényegében, az ellenőrző összeg egy bináris adatfolyam apró ábrázolása.

Az ellenőrző összegeket általában a hálózati programozáshoz használják annak ellenőrzésére, hogy teljes üzenet érkezett-e. Új üzenet érkezésekor az ellenőrző összeg újraszámítható és összehasonlítható a beérkezett ellenőrző összeggel annak biztosítására, hogy egyetlen bit sem veszett el. Ezenkívül hasznosak lehetnek a fájlkezelésben is, például fájlok összehasonlításához vagy a változások észleléséhez.

Az ellenőrző összegek létrehozására számos általános algoritmus létezik, például Adler32 és CRC32. Ezek az algoritmusok úgy működnek, hogy egy adatsort vagy bájtot sokkal kisebb betűk és számok sorrendjévé konvertálnak. Úgy vannak megtervezve, hogy a bemenetben bekövetkező bármilyen apró változás jelentősen eltérő számított ellenőrző összeget eredményez.

Vessünk egy pillantást a Java CRC32 támogatására. Vegye figyelembe, hogy bár a CRC32 hasznos lehet az ellenőrző összegeknél, nem ajánlott biztonságos műveletekhez, például a jelszó kivonásához.

3. Ellenőrző összeg stringből vagy bájt tömbből

Az első dolog, amit meg kell tennünk, hogy megszerezzük az ellenőrző összegű algoritmus bemenetét.

Ha a-val kezdjük Húr, használhatjuk a getBytes () módszer egy bájt tömb megszerzésére az a-ból Húr:

Karakterteszt = "teszt"; bájt [] bájt = test.getBytes ();

Ezután kiszámíthatjuk az ellenőrző összeget a bájt tömb segítségével:

public static hosszú getCRC32Checksum (byte [] bytes) {Checksum crc32 = new CRC32 (); crc32.update (bájt, 0, bájt.hossz); return crc32.getValue (); }

Itt a Java beépített programját használjuk CRC32 osztály. Miután az osztály példányos, használjuk a frissítés módszer a Ellenőrző összeg például a bemenet bájtjaival.

Egyszerűen fogalmazva: frissítés módszer helyettesíti a CRC32Tárgy - ez elősegíti a kód újrafelhasználását és nem teszi szükségessé az új példányok létrehozását Ellenőrző összeg. A CRC32 osztály néhány felülbírált módszert kínál a teljes bájt tömb vagy benne lévő néhány bájt helyettesítésére.

Végül a bájtok beállítása után, exportáljuk az ellenőrző összeget a getValue módszer.

4. Ellenőrző összeg egy InputStream

Amikor foglalkozik nagyobb bináris adatok adatsoraival a fenti megközelítés nem lenne túl memória-hatékony, mivel minden bájt be van töltve a memóriába.

Amikor van egy InputStream, dönthetünk a használat mellett CheckedInputStream hogy létrehozzuk az ellenőrző összegünket. Ezzel a megközelítéssel meghatározhatjuk, hogy hány bájt dolgozzon fel egy időben.

Ebben a példában egy adott mennyiségű bájtot dolgozunk fel abban az időben, amíg el nem érjük a folyam végét.

Az ellenőrző összeg értéke ekkor elérhető a CheckedInputStream:

public static long getChecksumCRC32 (InputStream stream, int bufferSize) dobja az IOException-t {CheckedInputStream ellenőrzöttInputStream = új CheckedInputStream (adatfolyam, új CRC32 ()); byte [] buffer = új byte [bufferSize]; while (ellenőrizteInputStream.read (puffer, 0, puffer.hossz)> = 0) {} visszatér a checkInputStream.getChecksum (). getValue (); }

5. Következtetés

Ebben az oktatóanyagban megvizsgáljuk, hogyan lehet ellenőrző összegeket előállítani bájt tömbökből és InputStreams a Java CRC32 támogatását használja.

Mint mindig, a kód elérhető a GitHubon.

Java alsó

Most jelentettem be az újat Tanulj tavaszt tanfolyam, amelynek középpontjában az 5. tavasz és a tavaszi bakancs 2 alapjai állnak:

>> ELLENŐRIZZE A FOLYAMATOT