MD5 raspršivanje 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

MD5 je široko korištena kriptografska hash funkcija koja daje hash od 128 bita.

U ovom ćemo članku vidjeti različite pristupe stvoriti MD5 hashove koristeći razne Java knjižnice.

2. MD5 Korištenje MessageDigest Razred

U. Postoji funkcionalnost raspršivanja java.security.MessageDigest razred. Ideja je prvo instancirati MessageDigest s vrstom algoritma koji želite koristiti kao argument:

MessageDigest.getInstance (algoritam niza)

A zatim nastavite ažurirati sažetak poruke pomoću ažuriranje() funkcija:

javno prazno ažuriranje (bajtni [] ulaz)

Gore navedena funkcija može se nazvati više puta kada kažete da čitate dugu datoteku. Tada napokon trebamo koristiti probaviti() funkcija za generiranje hash koda:

javni bajt [] sažetak ()

Ispod je primjer koji generira hash za lozinku, a zatim je provjerava:

@Test javna praznina givenPassword_whenHashing_thenVerifying () baca NoSuchAlgorithmException {String hash = "35454B055CC325EA1AF2126E27707052"; Lozinka niza = "ILoveJava"; MessageDigest md = MessageDigest.getInstance ("MD5"); md.update (password.getBytes ()); byte [] digest = md.digest (); Niz myHash = DatatypeConverter .printHexBinary (sažetak) .toUpperCase (); assertThat (myHash.equals (hash)). isTrue (); }

Slično tome, možemo provjeriti i kontrolnu sumu datoteke:

@Test javna praznina givenFile_generatingChecksum_thenVerifying () baca NoSuchAlgorithmException, IOException {String filename = "src / test / resources / test_md5.txt"; Niz kontrolne sume = "5EB63BBBE01EEED093CB22BB8F5ACDC3"; MessageDigest md = MessageDigest.getInstance ("MD5"); md.update (Files.readAllBytes (Paths.get (naziv datoteke))); bajt [] digest = md.digest (); Niz myChecksum = DatatypeConverter .printHexBinary (sažetak) .toUpperCase (); assertThat (myChecksum.equals (kontrolna suma)). isTrue (); }

Moramo biti svjesni da MessageDigest nije siguran u niti. Slijedom toga, trebali bismo koristiti novu instancu za svaku nit.

3. MD5 Korištenje Apache Commons

The org.apache.commons.codec.digest.DigestUtils klasa stvari čini mnogo jednostavnijima.

Pogledajmo primjer za raspršivanje i provjeru lozinke:

@Test javna praznina givenPassword_whenHashingUsingCommons_thenVerifying () {String hash = "35454B055CC325EA1AF2126E27707052"; Lozinka niza = "ILoveJava"; Niz md5Hex = DigestUtils .md5Hex (lozinka) .toUpperCase (); assertThat (md5Hex.equals (hash)). isTrue (); }

4. MD5 pomoću Guave

Ispod je još jedan pristup koji možemo slijediti za generiranje MD5 kontrolnih suma koristeći com.google.common.io.Files.hash :

@Test javna praznina givenFile_whenChecksumUsingGuava_thenVerifying () baca IOException {String filename = "src / test / resources / test_md5.txt"; Niz kontrolne sume = "5EB63BBBE01EEED093CB22BB8F5ACDC3"; HashCode hash = com.google.common.io.Files .hash (nova datoteka (naziv datoteke), Hashing.md5 ()); Niz myChecksum = hash.toString () .toUpperCase (); assertThat (myChecksum.equals (kontrolna suma)). isTrue (); }

Imajte na umu, to Hashing.md5 je zastarjelo. Međutim, kao što službena dokumentacija pokazuje, razlog je radije savjetovanje da se MD5 uopće ne koristi zbog sigurnosnih razloga. To znači da ovu metodu i dalje možemo koristiti ako se, na primjer, moramo integrirati sa naslijeđenim sustavom koji zahtijeva MD5. Inače, bolje bi bilo razmotriti sigurnije opcije, poput SHA-256.

5. Zaključak

Postoje različiti načini u Java API-ju i drugim nezavisnim API-ima poput Apache commons i Guava za generiranje MD5 hasha. Odaberite mudro na temelju zahtjeva projekta i ovisnosti koje vaš projekt treba slijediti.

Kao i uvijek, kôd je dostupan na Githubu.

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