Heim  >  Artikel  >  Java  >  So berechnen Sie mit Java den MD5-Wert einer geänderten Datei

So berechnen Sie mit Java den MD5-Wert einer geänderten Datei

WBOY
WBOYnach vorne
2023-05-29 08:16:451893Durchsuche

Was ist MD5?

MD5 (Message Digest Algorithm), eine weit verbreitete kryptografische Hash-Funktion, kann einen 128-Bit (16 Byte) Hash-Wert (Hash-Wert) erzeugen, um die Integrität der Informationsübertragung konsistent sicherzustellen. Die Zahl 5 dahinter ist darauf zurückzuführen, dass sie erfunden wurde, um MD4 zu ersetzen. Einfaches Verständnis: Seine Funktion besteht darin, der Datei eine eindeutige Kennung zu geben. Wenn wir die Erweiterung einer Datei ändern, wird die Datei möglicherweise nicht geöffnet, aber für MD5 gibt es keine Änderung. Bei einer Datei ist also jedes Umbenennen für die MD5-Überprüfung nutzlos.

Anwendungen von MD5

Hier sind nur einige der häufigeren Anwendungen, die ich gesehen habe.

Überprüfung der Download-Datei

Da das Netzwerk nicht perfekt ist, können beim Herunterladen großer Dateien Fehler auftreten (das gilt auch für kleine Dateien, aber normalerweise ist die Wahrscheinlichkeit größer, dass es zu Netzwerkproblemen kommt). Normal. Daher stellen einige Software-JARs oder Entwicklungstools normalerweise zusätzlich den MD5-Wert einer Datei zum Herunterladen bereit (da dieser sehr klein ist, wird er normalerweise als fehlerfrei angesehen), damit Benutzer überprüfen können, ob die Datei falsch heruntergeladen wurde. Aber mittlerweile wird das Netzwerk immer besser und es gibt praktisch keine Fehler mehr. Wenn der Netzwerkzustand des Benutzers schlecht ist, überprüfen Sie ihn daher unbedingt nach dem Herunterladen, um Fehler zu vermeiden. )

Hochladen von Dateien

Im Gegensatz dazu ist der Anwendungsbereich des Hochladens von Dateien mit MD5-Wert breiter. Der Hauptzweck hier ist die Dateideduplizierung und Dateifilterung.

Dateideduplizierung

Wir wissen, dass von Benutzern hochgeladene Dateien normalerweise viele Duplikate enthalten, z. B. kürzlich beliebte Filme, Fernsehserien, Spiele oder andere beliebte Ressourcen. Tatsächlich nehmen sie einen großen Teil der von Benutzern hochgeladenen Dateien ein, sodass für dieselbe Ressource nur eine Kopie gespeichert werden muss. Stellen Sie sich vor, dass 10.000 Benutzer (wahrscheinlich weniger als 10.000) denselben 4-GB-Film hochladen, dann beträgt die gesamte erforderliche Festplattenkapazität: 4*10.000 GB. Wenn Sie nur eine Kopie hochladen, wird der MD5-Wert der Datei für die Uploads anderer Benutzer lokal berechnet. Wenn sie gleich ist, wird sie als dieselbe Datei betrachtet, und dann reichen nur 4 GB Speicherplatz aus (natürlich). Die Speicherplatzgröße für die Aufzeichnungsinformationen wird hier ignoriert. Im Vergleich zur Größe der Datei selbst sind diese Informationen jedoch immer noch sehr klein. Sie können darüber nachdenken, wie enorm diese Platzersparnis ist.
Jeder sollte es in seinem täglichen Leben oft verwenden. Das Hochladen einer großen Datei von mehreren GB kann jedoch in wenigen Sekunden abgeschlossen werden. Allerdings weiß jeder, der sich mit dem Internet auskennt, dass die Upload-Rate des Netzwerks geringer ist als die Download-Rate (dies gilt nur für Endbenutzer) , die Download-Geschwindigkeit kann nicht erreicht werden und das Hochladen ist sogar unmöglich. Daher sollte lediglich ein Berechnungsprozess des MD5-Werts der Datei durchgeführt werden. Falls vorhanden, wird dieser nicht hochgeladen. Es wird lediglich aufgezeichnet, dass der Benutzer Eigentümer der Datei ist. Wenn nicht, laden Sie es einfach ehrlich hoch. Natürlich ist dieser Vorgang normalerweise sehr langsam.

Dateifilterung
Einige Dateien unterliegen dem Urheberrecht und den Richtlinien und Benutzer dürfen sie nicht hochladen. Daher werden die vom Benutzer hochgeladenen Dateien ebenfalls überprüft und dann im Hintergrund mit der Blacklist abgeglichen (dies sollte der Fall sein). Wenn der Abgleich erfolgreich ist, kann die Datei nicht hochgeladen werden oder die hochgeladene Datei wurde verarbeitet. Diese Methode ist sehr effizient und normalerweise sind die sogenannten zufälligen Namensänderungsvorgänge durch Benutzer völlig nutzlos.

Benutzer müssen sich daher an die Richtlinien und Vorschriften der jeweiligen Plattformen halten.

Ändern Sie den MD5-Wert der Datei

Solange der Binärinhalt der Datei geändert wird, ändert sich im Allgemeinen definitiv der MD5-Wert der Datei. Normalerweise gibt es eine Möglichkeit, mehrere Dateien mithilfe komprimierter Dateien zu komprimieren und hochzuladen. Auf diese Weise ändert sich auch der MD5-Wert der komprimierten Dateien. Einige Plattformen können Dateien jedoch auch dekomprimieren, sodass dies kein Allheilmittel ist. Es ist jedoch relativ einfach, die Binärdaten der Datei über ein Programm zu ändern und wiederherzustellen. Sie können den Java-Stream verwenden, um fast jeden Vorgang an der Datei auszuführen (z. B. jedes Byte der Datei zu verschlüsseln, sodass die Wiederherstellung schwierig ist). die Datei, oder Es ist auch eine gute Methode, einfach einen Abschnitt zu verschlüsseln oder zuerst eine Datei zu erstellen, eine feste Nummer in die Datei zu schreiben und dann die Daten der zugehörigen Datei zu schreiben. Bei Dateien können wir sie uns einfach als eine Reihe kontinuierlicher Binärströme vorstellen (logischerweise). Das Zusammenführen (Erhöhen) oder Abschneiden (Verringern) dieser Dateien ist ein einfacher Vorgang, der

Dateien und IO umfasst. Der Wissensfluss .

Ein einfaches Programm zur Berechnung von MD5
Dieses Programm ist das oben in

Java-Netzwerkprogrammierung Der Thread wird hier entfernt und die Operation wird vereinfacht. Es wird jedoch nur zur Berechnung des MD5-Werts verwendet und erfordert keine weiteren Vorgänge vom Benutzer.

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.security.DigestInputStream;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

import javax.xml.bind.DatatypeConverter;

public class TestMD5 {
	public static void main(String[] args){
		for (String filepath : args) {
			String md5 = computeMD5(new File(filepath));
			System.out.println(md5);
		}
	}
	
	
	private static String computeMD5(File file) {
		DigestInputStream din = null;
		try {
			MessageDigest md5 = MessageDigest.getInstance("MD5");
			//第一个参数是一个输入流
			din = new DigestInputStream(new BufferedInputStream(new FileInputStream(file)), md5);
			
			byte[] b = new byte[1024];
			while (din.read(b) != -1);
		
			byte[] digest = md5.digest();
			
			StringBuilder result = new StringBuilder(file.getName());
			result.append(": ");
			result.append(DatatypeConverter.printHexBinary(digest));
			return result.toString();
		} catch (NoSuchAlgorithmException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				if (din != null) {
					din.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		return null;
	}
}

Laufende Ergebnisse

So berechnen Sie mit Java den MD5-Wert einer geänderten Datei

MD5-Wert ändern

Hier sind zwei Bilder, füge sie zusammen. Beachten Sie, dass es sich bei der Zusammenführung, die ich hier habe, nicht um die übliche Dateizusammenführung handelt (z. B. das Zusammenführen eines Bildes mit einem Raster aus neun Quadraten), sondern die Zusammenführung binärer Daten von Dateien.

So berechnen Sie mit Java den MD5-Wert einer geänderten Datei

Berechnen Sie zunächst den MD5-Wert der Datei. Es ist ersichtlich, dass sich der MD5-Wert nicht geändert hat Datei.

So berechnen Sie mit Java den MD5-Wert einer geänderten Datei

Dann führen Sie die Dateien zusammen.

So berechnen Sie mit Java den MD5-Wert einer geänderten Datei

Berechnen Sie den MD5-Wert der zusammengeführten Datei

So berechnen Sie mit Java den MD5-Wert einer geänderten Datei

Das obige ist der detaillierte Inhalt vonSo berechnen Sie mit Java den MD5-Wert einer geänderten Datei. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen