Das MD5 von einer lokalen Datei und das MD5 (eTag) von S3 ist nicht das Gleiche

8

Ich bekomme das MD5 einer lokalen Datei, aber es ist anders als das MD5 (eTag) der "gleichen" Datei in Amazon S3. Was ich erreichen möchte, ist herauszufinden, ob die letzten Dateien, die ich in S3 habe, die gleichen sind, die ich lokal habe. Wenn ich MD5 nicht vergleichen kann, wie soll ich das dann machen?

Generieren von MD5 aus der lokalen Datei (abgeschnittenen Code):

%Vor%

Abrufen von MD5 (eTag) von S3 (abgeschnittenen Code):

%Vor%

PS: Ich benutze org.apache.commons.codec.digest.DigestUtils und com.google.common.io.Files Bibliotheken.

    
okysabeni 06.06.2011, 18:33
quelle

3 Antworten

11
%Vor%

Berechnet das MD5 des gerade berechneten MD5. Siehe DigestUtils.md5Hex Dokumentation .

hashtext ist tatsächlich MD5 (MD5 (Datei)) und nicht MD5 (Datei).

    
Bruno Rohée 06.06.2011, 21:04
quelle
3

Brunos Antwort bringt es zum Ausdruck, aber ich möchte darauf hinweisen, dass wenn Sie dies ohne die Google Guava-Abhängigkeit tun wollen, es nicht so schwierig ist (besonders seit / wenn Sie bereits Apache Commons verwenden)

Sie würden das ersetzen:

%Vor%

damit (mit einem Java 7-Versuch-Initialisierungs-Block):

%Vor%

Dies md5 ( InputStream) -Methode ist in Apache Commons seit Version 1.4.

    
Eyal 13.03.2012 11:30
quelle
1

Dies ist meine eigene Implementierung von S3 eTag. Ich habe es mit einer großen Datei getestet, die ich auf S3 hochgeladen habe, um einen Referenzwert für mehrteiliges eTag zu erhalten.

Denken Sie daran, dass die Komprimierung und die clientseitige Verschlüsselung eTag für die Überprüfung heruntergeladener Dateien unbrauchbar machen.

Etag.java

%Vor%

EtagTest.java

%Vor%

GarbageTools.java

%Vor%     
Laurent Caillette 22.07.2014 21:20
quelle

Tags und Links