SHA-256 ו- SHA3-256 Hashing בג'אווה

ג'אווה טופ

רק הכרזתי על החדש למד אביב קורס, המתמקד ביסודות האביב 5 ומגף האביב 2:

>> בדוק את הקורס

1. סקירה כללית

ה- SHA (אלגוריתם Hash מאובטח) הוא אחד מתפקודי החשיש הצפוניים הפופולריים. ניתן להשתמש ב- hash קריפטוגרפי ליצירת חתימה לטקסט או לקובץ נתונים. במדריך זה, בואו נסתכל כיצד אנו יכולים לבצע פעולות גיבוב של SHA-256 ו- SHA3-256 באמצעות ספריות Java שונות.

האלגוריתם SHA-256 מייצר חשיש 256 סיביות (32 בתים) בגודל קבוע כמעט ייחודי. זוהי פונקציה חד כיוונית, ולכן לא ניתן לפענח את התוצאה לערך המקורי.

נכון לעכשיו, השימוש ב- SHA-2 בשימוש נרחב מכיוון שהוא נחשב לאלגוריתם הגיבוב המאובטח ביותר בזירה ההצפנתית.

SHA-3 הוא תקן הגיבוב המאובטח האחרון אחרי SHA-2. בהשוואה ל- SHA-2, SHA-3 מספק גישה שונה לייצור חשיש חד כיווני ייחודי, והוא יכול להיות הרבה יותר מהיר בכמה יישומי חומרה. בדומה ל- SHA-256, SHA3-256 הוא האלגוריתם באורך קבוע של 256 סיביות ב- SHA-3.

NIST שחררה את SHA-3 בשנת 2015, כך שאין כרגע ספריות SHA-3 כמו SHA-2 לעת עתה. רק ב- JDK 9 היו אלגוריתמי SHA-3 זמינים אצל ספקי ברירת המחדל המובנים.

עכשיו, בואו נתחיל עם SHA-256.

2. MessageDigest שיעור בג'אווה

ג'אווה מספקת מובנה MessageDigest כיתה ל- SHA-256 hashing:

MessageDigest digest = MessageDigest.getInstance ("SHA-256"); בתים [] encodedhash = digest.digest (originalString.getBytes (StandardCharsets.UTF_8));

עם זאת, כאן עלינו להשתמש בבייט מותאם אישית להמיר hex כדי לקבל את הערך הגיבוב בהקסדצימלי:

פרטי מחרוזת סטטית פרטיתToHex (בייט [] hash) {StringBuilder hexString = StringBuilder חדש (2 * hash.length); עבור (int i = 0; i <hash.length; i ++) {Hex hex = Integer.toHexString (0xff & hash [i]); אם (hex.length () == 1) {hexString.append ('0'); } hexString.append (hex); } להחזיר hexString.toString (); }

עלינו להיות מודעים לכך ש MessageDigest אינו בטוח בחוטים. כתוצאה מכך, עלינו להשתמש במופע חדש לכל שרשור.

3. ספריית גויאבה

ספריית גוגל גויאבה מספקת גם כיתת שירות לביצוע hashing.

ראשית, בואו נגדיר את התלות:

 com.google.guava גויאבה 20.0 

עכשיו, כך נוכל להשתמש בגויאבה לחשיש מחרוזת:

מחרוזת sha256hex = Hashing.sha256 () .hashString (originalString, StandardCharsets.UTF_8) .toString ();

4. קודקים של אפאצ'י קומונס

באופן דומה, אנו יכולים גם להשתמש בקודקי Apache Commons:

 commons-codec commons-codec 1.11 

הנה מחלקת השירות - נקראת DigestUtils - התומך ב- SHA-256 hashing:

מחרוזת sha256hex = DigestUtils.sha256Hex (originalString);

5. ספריית טירה קופצנית

5.1. תלות של Maven

 org.bouncycastle bcprov-jdk15on 1.60 

5.2. Hashing באמצעות ספריית הטירה הקופצנית

ממשק ה- API של Bouncy Castle מספק מחלקת שירות להמרת נתוני hex לבתים ובחזרה.

עם זאת, נדרש לאכלס תחילה את העיכול באמצעות ה- API המובנה של Java:

MessageDigest digest = MessageDigest.getInstance ("SHA-256"); בייט [] hash = digest.digest (originalString.getBytes (StandardCharsets.UTF_8)); מחרוזת sha256hex = מחרוזת חדשה (Hex.encode (hash));

6. SHA3-256

עכשיו בואו נמשיך עם SHA3-256. חשיש SHA3-256 בג'אווה אינו שונה לחלוטין מ- SHA-256.

6.1. MessageDigest שיעור בג'אווה

החל מ- JDK 9, אנו יכולים פשוט להשתמש באלגוריתם SHA3-256 המובנה:

סופי Digest Digest = MessageDigest.getInstance ("SHA3-256"); בתים סופיים [] hashbytes = digest.digest (originalString.getBytes (StandardCharsets.UTF_8)); מחרוזת sha3Hex = bytesToHex (hashbytes);

6.2. קודקים של אפאצ'י קומונס

Apache Commons Codec מספק נוח DigestUtils עטיפה עבור MessageDigest מעמד. ספרייה זו החלה לתמוך ב- SHA3-256 מאז גרסה 1.11, והיא דורשת גם JDK 9+:

מחרוזת sha3Hex = DigestUtils חדשים ("SHA3-256"). DigestAsHex (originalString);

6.3. Keccak-256

Keccak-256 הוא אלגוריתם hashing פופולרי נוסף של SHA3-256. נכון לעכשיו הוא משמש כאלטרנטיבה ל- SHA3-256 הסטנדרטי. Keccak-256 מספק אותה רמת אבטחה כמו SHA3-256 הסטנדרטית, והיא שונה מ- SHA3-256 רק על כלל הריפוד. נעשה בו שימוש בכמה פרויקטים של בלוקצ'יין, כמו מונורו.

שוב, עלינו לייבא את ספריית הטירה הקופצנית בכדי להשתמש ב- Keccak-256:

Security.addProvider (חדש BouncyCastleProvider ()); סופי digestDigest = MessageDigest.getInstance ("Keccak-256"); בתים סופיים [] encodedhash = digest.digest (originalString.getBytes (StandardCharsets.UTF_8)); מחרוזת sha3Hex = bytesToHex (קידודשש);

אנו יכולים גם להשתמש בממשק ה- API של Bouncy Castle כדי לבצע את הגיבוב:

Keccak.Digest256 digest256 = Keccak.Digest256 חדש (); בתים [] hashbytes = digest256.digest (originalString.getBytes (StandardCharsets.UTF_8)); מחרוזת sha3Hex = מחרוזת חדשה (Hex.encode (hashbytes));

7. מסקנה

במאמר מהיר זה, הסתכלנו על כמה דרכים ליישום SHA-256 ו- SHA3-256 hashing ב- Java, תוך שימוש בספריות מובנות וגם בספריות צד שלישי.

קוד המקור של הדוגמאות לעיל נמצא בפרויקט GitHub.

תחתית Java

רק הכרזתי על החדש למד אביב קורס, המתמקד ביסודות האביב 5 ומגף האביב 2:

>> בדוק את הקורס

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