SHA-256 és SHA3-256 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 SHA (Secure Hash Algorithm) az egyik népszerű kriptográfiai hash funkció. Egy kriptográfiai kivonat felhasználható aláírás készítésére egy szöveghez vagy egy adatfájlhoz. Ebben az oktatóanyagban nézzük meg, hogyan hajthatjuk végre az SHA-256 és SHA3-256 kivonatolási műveleteket különböző Java könyvtárak segítségével.

Az SHA-256 algoritmus szinte egyedi, rögzített méretű 256 bites (32 bájt) kivonatot generál. Ez egyirányú függvény, így az eredmény nem dekódolható vissza az eredeti értékre.

Jelenleg az SHA-2 kivonatolást széles körben használják, mivel a kriptográfiai aréna legbiztonságosabb hash algoritmusának tekintik.

Az SHA-3 a legújabb biztonságos hash szabvány az SHA-2 után. Az SHA-2-hez képest az SHA-3 eltérő megközelítést kínál az egyedi egyirányú hash létrehozásához, és egyes hardveres megvalósításoknál sokkal gyorsabb lehet. Az SHA-256-hoz hasonlóan az SHA3-256 az SHA-3 256 bites fix hosszúságú algoritmusa.

A NIST 2015-ben adta ki az SHA-3-at, így egyelőre nincs annyi SHA-3 könyvtár, mint az SHA-2. Csak a JDK 9-ben voltak elérhetők az SHA-3 algoritmusok a beépített alapértelmezett szolgáltatóknál.

Kezdjük az SHA-256-tal.

2. Üzenet feldolgozása Osztály Java nyelven

A Java beépített Üzenet feldolgozása osztály az SHA-256 kivonathoz:

MessageDigest digest = MessageDigest.getInstance ("SHA-256"); byte [] encodedhash = digest.digest (originalString.getBytes (StandardCharsets.UTF_8));

Azonban itt egy egyedi byte-hex átalakítót kell használnunk, hogy hexadecimális formában megkapjuk a kivonatolt értéket:

privát statikus String bytesToHex (byte [] hash) {StringBuilder hexString = új StringBuilder (2 * hash.length); for (int i = 0; i <hash.length; i ++) {String hex = Integer.toHexString (0xff & hash [i]); if (hex.length () == 1) {hexString.append ('0'); } hexString.append (hex); } return hexString.toString (); }

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. Guava könyvtár

A Google Guava könyvtár segédprogramot is kínál a hash-hoz.

Először definiáljuk a függőséget:

 com.google.guava guava 20.0 

Itt van, hogyan használhatjuk a Guavát egy húr kivágására:

String sha256hex = Hashing.sha256 () .hashString (originalString, StandardCharsets.UTF_8) .toString ();

4. Apache Commons kodekek

Hasonlóképpen használhatjuk az Apache Commons kodekeket is:

 commons-kodek commons-kodek 1.11 

Itt van a hasznossági osztály - hívják DigestUtils - amely támogatja az SHA-256 kivonatot:

String sha256hex = DigestUtils.sha256Hex (originalString);

5. Ugrálóvár-könyvtár

5.1. Maven-függőség

 org.bouncycastle bcprov-jdk15on 1.60 

5.2. Hashing a Bouncy Castle Library használatával

A Bouncy Castle API segédprogramot nyújt a hexadecimek bájtokká és visszaállításához.

Először azonban a beépített Java API használatával kell feltölteni egy összefoglalót:

MessageDigest digest = MessageDigest.getInstance ("SHA-256"); byte [] hash = digest.digest (originalString.getBytes (StandardCharsets.UTF_8)); String sha256hex = új karakterlánc (Hex.encode (hash));

6. SHA3-256

Most folytassuk az SHA3-256-tal. Az SHA3-256 Java-kivonatolás nem teljesen különbözik az SHA-256-tól.

6.1. Üzenet feldolgozása Osztály Java nyelven

A JDK 9-től kezdve egyszerűen használhatjuk a beépített SHA3-256 algoritmust:

végső MessageDigest digest = MessageDigest.getInstance ("SHA3-256"); végső bájt [] hasbájt = digest.digest (originalString.getBytes (StandardCharsets.UTF_8)); String sha3Hex = bájtToHex (hasbájt);

6.2. Apache Commons kodekek

Az Apache Commons Codecs kényelmes DigestUtils burkoló a Üzenet feldolgozása osztály. Ez a könyvtár az 1.11-es verzió óta támogatni kezdte az SHA3-256-ot, és ehhez JDK 9+ verzióra is szükség van:

String sha3Hex = new DigestUtils ("SHA3-256"). DigestAsHex (originalString);

6.3. Keccak-256

A Keccak-256 egy másik népszerű SHA3-256 hash algoritmus. Jelenleg az SHA3-256 szabvány alternatívájaként szolgál. A Keccak-256 ugyanazt a biztonsági szintet nyújtja, mint a standard SHA3-256, és csak a kitöltési szabályban tér el az SHA3-256-tól. Számos blokklánc projektben használták, például Monoróban.

Ismét importálnunk kell a Bouncy Castle Library-t a Keccak-256 hash használatához:

Security.addProvider (új BouncyCastleProvider ()); végső MessageDigest digest = MessageDigest.getInstance ("Keccak-256"); végső bájt [] encodedhash = digest.digest (originalString.getBytes (StandardCharsets.UTF_8)); Karakterlánc sha3Hex = bájtToHex (kódolt hash);

A hasítás elvégzéséhez a Bouncy Castle API-t is felhasználhatjuk:

Keccak.Digest256 digest256 = new Keccak.Digest256 (); bájt [] hasbájt = digest256.digest (originalString.getBytes (StandardCharsets.UTF_8)); Karakterlánc sha3Hex = új karakterlánc (Hex.encode (hasbájt));

7. Következtetés

Ebben a rövid cikkben áttekintettük az SHA-256 és SHA3-256 kivonatolás Java-ban történő megvalósításának néhány módját, beépített és harmadik féltől származó könyvtárak használatával egyaránt.

A fenti példák forráskódja megtalálható a GitHub projektben.

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