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

MD5 je široko používaná kryptografická hašovacia funkcia, ktorá produkuje hash 128 bitov.

V tomto článku uvidíme rôzne prístupy k vytvárať hash MD5 pomocou rôznych knižníc Java.

2. Používanie MD5 MessageDigest Trieda

V systéme Windows je hash java.security.MessageDigest trieda. Myšlienka je najskôr vytvoriť inštanciu MessageDigest pomocou druhu algoritmu, ktorý chcete použiť ako argument:

MessageDigest.getInstance (reťazcový algoritmus)

A potom pokračujte v aktualizácii súhrnu správ pomocou aktualizácia () funkcia:

aktualizácia verejnej neplatnosti (vstup byte [])

Vyššie uvedenú funkciu je možné zavolať viackrát, keď hovoríte, že čítate dlhý súbor. Potom konečne musíme použiť stráviť () funkcia na vygenerovanie hash kódu:

verejný bajt [] prehľad ()

Nižšie je uvedený príklad, ktorý generuje hašovanie hesla a potom ho overuje:

@Test public void givenPassword_whenHashing_thenVerifying () hodí NoSuchAlgorithmException {String hash = "35454B055CC325EA1AF2126E27707052"; Reťazcové heslo = "ILoveJava"; MessageDigest md = MessageDigest.getInstance ("MD5"); md.update (heslo.getBytes ()); byte [] digest = md.digest (); Reťazec myHash = DatatypeConverter .printHexBinary (digest) .toUpperCase (); assertThat (myHash.equals (hash)). isTrue (); }

Podobne môžeme overiť aj kontrolný súčet súboru:

@Test public void givenFile_generatingChecksum_thenVerifying () vyvolá NoSuchAlgorithmException, IOException {reťazec názov súboru = "src / test / resources / test_md5.txt"; Kontrolný súčet reťazcov = "5EB63BBBE01EEED093CB22BB8F5ACDC3"; MessageDigest md = MessageDigest.getInstance ("MD5"); md.update (Files.readAllBytes (Paths.get (názov súboru))); byte [] digest = md.digest (); Reťazec myChecksum = DatatypeConverter .printHexBinary (digest) .toUpperCase (); assertThat (myChecksum.equals (checksum)). isTrue (); }

Musíme si uvedomiť, že MessageDigest nie je bezpečný pre vlákna. Preto by sme mali pre každé vlákno použiť novú inštanciu.

3. MD5 pomocou Apache Commons

The org.apache.commons.codec.digest.DigestUtils trieda veci robí oveľa jednoduchšími.

Pozrime sa na príklad hašovania a overovania hesla:

@Test public void givenPassword_whenHashingUsingCommons_thenVerifying () {String hash = "35454B055CC325EA1AF2126E27707052"; Reťazcové heslo = "ILoveJava"; Reťazec md5Hex = DigestUtils .md5Hex (heslo) .toUpperCase (); assertThat (md5Hex.equals (hash)). isTrue (); }

4. MD5 Používanie Guava

Ďalej uvádzame ďalší prístup, pomocou ktorého môžeme generovať kontrolné súčty MD5 pomocou com.google.common.io.Files.hash :

@Test public void givenFile_whenChecksumUsingGuava_thenVerifying () vyvolá IOException {reťazec názov súboru = "src / test / resources / test_md5.txt"; Kontrolný súčet reťazcov = "5EB63BBBE01EEED093CB22BB8F5ACDC3"; HashCode hash = com.google.common.io.Files .hash (nový súbor (názov súboru), Hashing.md5 ()); Reťazec myChecksum = hash.toString () .toUpperCase (); assertThat (myChecksum.equals (checksum)). isTrue (); }

Poznač si to Hashing.md5 je zastaraná. Ako však naznačuje oficiálna dokumentácia, dôvodom je skôr odporučiť, aby sa MD5 všeobecne nepoužíval z bezpečnostných dôvodov. To znamená, že túto metódu môžeme stále používať, ak napríklad potrebujeme integráciu so starým systémom, ktorý vyžaduje MD5. V opačnom prípade by sme mali lepšie zvážiť bezpečnejšie možnosti, ako napríklad SHA-256.

5. Záver

V rozhraní Java API a v iných rozhraniach API tretích strán, ako sú Apache commons a Guava, možno generovať hash MD5 rôznymi spôsobmi. Vyberte si rozumne na základe požiadaviek projektu a závislostí, ktoré musí váš projekt dodržiavať.

Ako vždy, kód je k dispozícii na stránkach 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

$config[zx-auto] not found$config[zx-overlay] not found