Hashwerte von Files in ein Byte-Array speichern und als Hex ausgeben

Diskutiere Hashwerte von Files in ein Byte-Array speichern und als Hex ausgeben im Hausaufgaben Forum; Hallo Liebe Community, Ich arbeite seit einiger Zeit an einem Programm womit man Hashwerte von Dateien vergleichen kann. Das Grundgerüst ist...

  1. Nie Mehr
    Nie Mehr Neues Mitglied
    Hallo Liebe Community,

    Ich arbeite seit einiger Zeit an einem Programm womit man Hashwerte von Dateien vergleichen kann. Das Grundgerüst ist folgendes:
    1. Schritt: Es wird ein Hauptverzeichnis nach allen Files durchsucht
    2. Schritt: Es wird ein Hashwert für jede Datei gebildet (SHA-256)
    3. Schritt: Die generierten Hashwerte und Dateipfade werden in eine neue Datei geschrieben.

    Meine Aufgabe ist nun, die generierten Hashwerte in ein Byte-Array zu speichern und sie in der neuen Datei als Hex auszugeben.

    Beim durchforsten des Internets habe ich immer nur Beispiele bzw. Lösungen gefunden, die sich nur auf Hashwerte eines Strings beziehen. Ich bräuchte allerdings eine andere Möglichkeit die Hashwerte in ein Byte-Array zu speichern. Jedoch finde ich dazu keinerlei Hilfe im Internet.

    Hier ein Ausschnitt meines Codes, wo ich vermute, dass das Byte Array hinein soll.
    Code (Java):
    private BigInteger genHash(File f) throws NoSuchAlgorithmException, FileNotFoundException {
            MessageDigest digest = MessageDigest.getInstance("SHA-256");
            BigInteger bigInt = null;
            InputStream is = new FileInputStream(f);
            byte[] buffer = new byte[8192];
            int read = 0;
            try {
                while ((read = is.read(buffer)) > 0) {
                    digest.update(buffer, 0, read);              
                }
                byte[] sha256sum = digest.digest();
                bigInt = new BigInteger(1, sha256sum);
            } catch (IOException e) {
                throw new RuntimeException("Unable to process file for SHA-256", e);          
            } finally {
                try {
                    is.close(); //InputStream is closed      
                } catch (IOException e) {
                    throw new RuntimeException("Unable to close input stream for SHA-256 calculation", e); // throws Exception that the program was not able to close the InputStream      
                }
            }
            return bigInt; // return value
        }
    Ich hoffe Ihr könnt mir helfen, das Problem bzw. die Aufgabe zu lösen.
    Bei Rückfragen stehe ich gerne zur Verfügung.

    Mit freundlichen Grüßen
    Jasmin
     
  2. Vielleicht helfen dir diese Grundlagen hier weiter: (hier klicken)
  3. truesoul
    truesoul Aktives Mitglied
    Hallo.

    Code (Java):

    byte[] b = Files.readAllBytes(Paths.get("/path/to/file"));
    byte[] hash = MessageDigest.getInstance("SHA-256").digest(b);
     
    Grüße
     
    VfL_Freak gefällt das.
  4. Nie Mehr
    Nie Mehr Neues Mitglied
    Hallo,

    erst einmal danke für den Vorschlag, ich denke es ist nah an dem dran was ich suche.
    Nach längerem testen und rumprobieren komme ich leider immer noch nicht auf das Ergebnis was ich haben möchte.
    Zumal ich nur einen Path bei dem Vorschlag oben angeben kann der direkt auf ein File verweist, was ich aber nicht möchte.
    Vielleicht hilft es bei der Antwort wenn ich den Rest meines Codes zeige:
    Code (Java):
    private FileWriter fw;

        public static void main(String[] args) throws NoSuchAlgorithmException, IOException {
            new SHA256calc().start();
        }

        public void start() throws IOException, NoSuchAlgorithmException {
            Date date = new Date();
            SimpleDateFormat DATE_TIME_FORMAT = new SimpleDateFormat("yyyyMMdd-HHmmss");   File("C:\\Users\\..\\Desktop\\Ordner");
            fw = new FileWriter("C:\\Users\\..\\Desktop\\Hashfiles\\Hashfile" + DATE_TIME_FORMAT.format(date) + ".csv");
            this.searchDir(f);
            fw.close();
            System.out.println("Finish");
        }

        private void searchDir(File f) throws IOException, NoSuchAlgorithmException {
            File[] content = f.listFiles();
            for (File data : content) {
                if (data.isDirectory()) {
                    this.searchDir(data);
                } else {
                    fw.write(this.genHash(data) + ";" + data.getAbsolutePath() + System.lineSeparator());
                }
            }
        }
    Da ich in diesem Ordner mehrere Dateien und Unterordner habe, benötige ich eine andere Lösung.
    Ich hoffe Ihr könnt mir nochmal helfen.

    Mit freundlichen Grüßen
    Jasmin
     
  5. truesoul
    truesoul Aktives Mitglied
    Hallo.

    Also du kannst doch toPath() von data aufrufen?

    Code (Java):

    private void searchDir(File f) throws IOException, NoSuchAlgorithmException {
        File[] content = f.listFiles();
        for (File data : content) {
            if (data.isDirectory()) {
                this.searchDir(data);
            } else {
                byte[] b = Files.readAllBytes(data.toPath());
                byte[] hash = MessageDigest.getInstance("SHA-256").digest(b);

                fw.write(hash + ";" + data.getAbsolutePath() + System.lineSeparator());
            }
        }
    }

     
    Grüße
     
    Nie Mehr gefällt das.
  6. Nie Mehr
    Nie Mehr Neues Mitglied
    Danke für die Hilfe, darauf wäre ich jetzt nicht gekommen. :)
    Jetzt funktioniert es auch.
     
  7. Hast du dir unsere Java-Grundlagen hier schon gesichert? *Klick*
Die Seite wird geladen...

Hashwerte von Files in ein Byte-Array speichern und als Hex ausgeben - Ähnliche Themen

Einlesen eines .txt Files nur bei gesetztem Breakpoint möglich
Einlesen eines .txt Files nur bei gesetztem Breakpoint möglich im Forum Java Basics - Anfänger-Themen
xhtml-Files in seperatem Projekt
xhtml-Files in seperatem Projekt im Forum Web Tier
Spring, unzählige xml-servlets files?
Spring, unzählige xml-servlets files? im Forum Java Basics - Anfänger-Themen
Eigenschaften (hier Verknüpfung) eines Files lesen
Eigenschaften (hier Verknüpfung) eines Files lesen im Forum Allgemeine Java-Themen
DBF-Files und Encoding
DBF-Files und Encoding im Forum Java Basics - Anfänger-Themen
Thema: Hashwerte von Files in ein Byte-Array speichern und als Hex ausgeben