MD5 hashing 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

Az MD5 egy széles körben használt kriptográfiai kivonatoló funkció, amely 128 bites kivonatot állít elő.

Ebben a cikkben különböző megközelítéseket fogunk látni MD5 kivonatokat készíthet különféle Java könyvtárak segítségével.

2. MD5 használata Üzenet feldolgozása Osztály

Van egy kivonatoló funkció java.security.MessageDigest osztály. Az ötlet az, hogy először példázza Üzenet feldolgozása azzal a fajta algoritmussal, amelyet argumentumként használni szeretne:

MessageDigest.getInstance (karakterlánc-algoritmus)

Ezután folyamatosan frissítse az üzenetet frissítés () funkció:

public void frissítés (bájt [] bemenet)

A fenti függvény többször is meghívható, ha azt mondják, hogy hosszú fájlt olvas. Aztán végre használnunk kell megemészteni() függvény kivonatkód előállításához:

nyilvános bájt [] kivonat ()

Az alábbiakban bemutatunk egy példát, amely létrehoz egy kivonatot a jelszóhoz, majd ellenőrzi azt:

@Test public void givenPassword_whenHashing_thenVerifying () throws NoSuchAlgorithmException {String hash = "35454B055CC325EA1AF2126E27707052"; Karakterlánc jelszó = "ILoveJava"; MessageDigest md = MessageDigest.getInstance ("MD5"); md.update (jelszó.getBytes ()); bájt [] emésztés = md.digest (); String myHash = DatatypeConverter .printHexBinary (digest) .toUpperCase (); assertThat (myHash.egyenlő (hash)). isTrue (); }

Hasonlóképpen ellenőrizhetjük egy fájl ellenőrző összegét is:

@Test public void givenFile_generatingChecksum_thenVerifying () throws NoSuchAlgorithmException, IOException {String filename = "src / test / resources / test_md5.txt"; Karakterlánc ellenőrző összeg = "5EB63BBBE01EEED093CB22BB8F5ACDC3"; MessageDigest md = MessageDigest.getInstance ("MD5"); md.update (Files.readAllBytes (Paths.get (fájlnév))); bájt [] emésztés = md.digest (); Karakterlánc myChecksum = DatatypeConverter .printHexBinary (digest) .toUpperCase (); assertThat (myChecksum.equals (ellenőrző összeg)). isTrue (); }

Tudnunk kell, hogy a A MessageDigest nem biztonságos a szálak számára. Következésképpen minden szálhoz új példányt kell használnunk.

3. MD5 az Apache Commons használatával

A org.apache.commons.codec.digest.DigestUtils osztály sokkal egyszerűbbé teszi a dolgokat.

Nézzünk meg egy példát a jelszó kivonatolására és ellenőrzésére:

@Test public void givenPassword_whenHashingUsingCommons_thenVerifying () {String hash = "35454B055CC325EA1AF2126E27707052"; Karakterlánc jelszó = "ILoveJava"; Karakterlánc md5Hex = DigestUtils .md5Hex (jelszó) .toUpperCase (); assertThat (md5Hex.egyenlő (hash)). isTrue (); }

4. MD5 Guava használata

Az alábbiakban bemutatunk egy másik megközelítést, amelyet követhetünk az MD5 ellenőrző összegek előállításához com.google.common.io.Files.hash :

@Test public void givenFile_whenChecksumUsingGuava_thenVerifying () dob IOException {String filename = "src / test / resources / test_md5.txt"; Karakterlánc ellenőrző összeg = "5EB63BBBE01EEED093CB22BB8F5ACDC3"; HashCode hash = com.google.common.io.Files .hash (új fájl (fájlnév), Hashing.md5 ()); Karakterlánc myChecksum = hash.toString () .toUpperCase (); assertThat (myChecksum.equals (ellenőrző összeg)). isTrue (); }

Vegye figyelembe, hogy Hashing.md5 elavult. Amint azonban a hivatalos dokumentáció jelzi, ennek oka inkább az, hogy azt tanácsoljuk, hogy biztonsági okokból ne használja az MD5-öt általában. Ez azt jelenti, hogy továbbra is használhatjuk ezt a módszert, ha például integrálnunk kell az MD5-t igénylő örökölt rendszerbe. Egyébként jobban járunk, ha biztonságosabb lehetőségeket veszünk figyelembe, például az SHA-256-ot.

5. Következtetés

Különböző módszerek léteznek a Java API-ban és más harmadik féltől származó API-kban, például az Apache commons-ban és a Guava-ban az MD5 hash létrehozására. Bölcsen válasszon a projekt követelményei és a projektnek követendő függőségek alapján.

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