Die Ermittlung einer Dateiprüfsumme ist mit wenigen Programmzeilen möglich. Zum Test benötigt Ihr eine Testdatei, welche Ihr zum Beispiel mit dem Beispiel A11 Erzeuge eine Datei von definierter Größe erstellen könnt. Testet auch mal Dateien in der Größe von mehreren hundert Megabytes und Ihr werdet feststellen, wie rasend schnell die Berechnung geschieht.
Die SHA-256 und SHA-512-Hashwert-Algorithmen sind eine Weiterentwicklung der SHA-1-Familie und bieten deutlich mehr Sicherheit. Daher solltet Ihr – wo immer es geht – diese Hash-Algorithmen nutzen. Aktuell ist die SHA-3-Familie dabei, in die Java-Welt vorzudringen, aber es existieren noch keine Bibliotheken dafür.
Die nachfolgende Programmroutine dürfte Euch für viele „quick and dirty“-Anwendungsfälle eine schnelle Unterstützung bieten:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
package net.bplaced.javacrypto.hashandmac; /* * Herkunft/Origin: http://javacrypto.bplaced.net/ * Programmierer/Programmer: Michael Fehr * Copyright/Copyright: frei verwendbares Programm (Public Domain) * Copyright: This is free and unencumbered software released into the public domain. * Lizenttext/Licence: <http://unlicense.org> * getestet mit/tested with: Java Runtime Environment 8 Update 191 x64 * getestet mit/tested with: Java Runtime Environment 11.0.1 x64 * Datum/Date (dd.mm.jjjj): 18.01.2019 * Funktion: errechnet den SHA-256 und SHA-512-Hashwert einer Datei * Function: calculates the SHA-256 and SHA-512-hash of a file * * Sicherheitshinweis/Security notice * Die Programmroutinen dienen nur der Darstellung und haben keinen Anspruch auf eine korrekte Funktion, * insbesondere mit Blick auf die Sicherheit ! * Prüfen Sie die Sicherheit bevor das Programm in der echten Welt eingesetzt wird. * The program routines just show the function but please be aware of the security part - * check yourself before using in the real world ! */ import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; public class F03_Sha256Sha512File { public static void main(String[] args) throws Exception { System.out.println("F03 SHA-256 bzw. SHA-512 Hashfunktion mit einer Datei"); String filenameString = "a11_test_1mb.dat"; byte[] hashByte = generateSha256(filenameString); System.out.println("\nSHA-256-Hashwert der Datei:" + filenameString); System.out.println( "hashByte Länge:" + hashByte.length + " Data:" + printHexBinary(hashByte)); hashByte = generateSha512(filenameString); System.out.println("\nSHA-512-Hashwert der Datei:" + filenameString); System.out.println( "hashByte Länge:" + hashByte.length + " Data:" + printHexBinary(hashByte)); System.out.println("\nF03 SHA-256 bzw. SHA-512 Hashfunktion mit einer Datei beendet"); } public static byte[] generateSha256(String filenameString) throws IOException, NoSuchAlgorithmException { File file = new File(filenameString); byte[] bufferByte = new byte[(int) file.length()]; FileInputStream fis = new FileInputStream(file); fis.read(bufferByte); fis.close(); MessageDigest md = MessageDigest.getInstance("SHA-256"); md.update(bufferByte); return md.digest(); } public static byte[] generateSha512(String filenameString) throws IOException, NoSuchAlgorithmException { File file = new File(filenameString); byte[] bufferByte = new byte[(int) file.length()]; FileInputStream fis = new FileInputStream(file); fis.read(bufferByte); fis.close(); MessageDigest md = MessageDigest.getInstance("SHA-512"); md.update(bufferByte); return md.digest(); } public static String printHexBinary(byte[] bytes) { final char[] hexArray = "0123456789ABCDEF".toCharArray(); char[] hexChars = new char[bytes.length * 2]; for (int j = 0; j < bytes.length; j++) { int v = bytes[j] & 0xFF; hexChars[j * 2] = hexArray[v >>> 4]; hexChars[j * 2 + 1] = hexArray[v & 0x0F]; } return new String(hexChars); } } |
Die Konsole zeigt Euch sehr schnell die erzeugten SHA-256 und SHA-512-Hashwerte (Prüfsummen) an:
1 2 3 4 5 6 7 8 9 |
F03 SHA-256 bzw. SHA-512 Hashfunktion mit einer Datei SHA-256-Hashwert der Datei:a11_test_1mb.dat hashByte Länge:32 Data:30E14955EBF1352266DC2FF8067E68104607E750ABB9D3B36582B8AF909FCB58 SHA-512-Hashwert der Datei:a11_test_1mb.dat hashByte Länge:64 Data:D6292685B380E338E025B3415A90FE8F9D39A46E7BDBA8CB78C50A338CEFCA741F69E4E46411C32DE1AFDEDFB268E579A51F81FF85E56F55B0EE7C33FE8C25C9 F03 SHA-256 bzw. SHA-512 Hashfunktion mit einer Datei beendet |
Alle Quellcodes zu Hashes und MACs findet Ihr zum Download in meinem Github-Repository, welches Ihr über diesen Link erreicht: https://github.com/java-crypto/F-Hashes-und-MACs. Alle Programme sind sowohl unter Java 8 als auch unter Java 11 lauffähig.
Die Lizenz zum obigen Beispiel findet Ihr auf der eigenen Lizenz-Seite.
Letzte Aktualisierung: 21.01.2019