Ich möchte Java verwenden, um die MD5-Prüfsumme einer Datei zu ermitteln. Ich war wirklich überrascht, aber ich habe nichts gefunden, das zeigt, wie man die MD5-Prüfsumme einer Datei abrufen kann.
Wie wird das gemacht?
Ich möchte Java verwenden, um die MD5-Prüfsumme einer Datei zu ermitteln. Ich war wirklich überrascht, aber ich habe nichts gefunden, das zeigt, wie man die MD5-Prüfsumme einer Datei abrufen kann.
Wie wird das gemacht?
Eine weitere Umsetzung: Schnelle MD5-Implementierung in Java
String hash = MD5.asHex(MD5.getHash(new File(filename)));
Standard Java Runtime Environment Weg :
public String checksum(File file) {
try {
InputStream fin = new FileInputStream(file);
java.security.MessageDigest md5er =
MessageDigest.getInstance("MD5");
byte[] buffer = new byte[1024];
int read;
do {
read = fin.read(buffer);
if (read > 0)
md5er.update(buffer, 0, read);
} while (read != -1);
fin.close();
byte[] digest = md5er.digest();
if (digest == null)
return null;
String strDigest = "0x";
for (int i = 0; i < digest.length; i++) {
strDigest += Integer.toString((digest[i] & 0xff)
+ 0x100, 16).substring(1).toUpperCase();
}
return strDigest;
} catch (Exception e) {
return null;
}
}
Das Ergebnis ist das gleiche wie das Linux-Dienstprogramm md5sum.
Hier ist eine einfache Funktion, die den Code von Sunil so umgeht, dass sie eine Datei als Parameter annimmt. Die Funktion benötigt keine externen Bibliotheken, aber sie benötigt Java 7.
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import javax.xml.bind.DatatypeConverter;
public class Checksum {
/**
* Generates an MD5 checksum as a String.
* @param file The file that is being checksummed.
* @return Hex string of the checksum value.
* @throws NoSuchAlgorithmException
* @throws IOException
*/
public static String generate(File file) throws NoSuchAlgorithmException,IOException {
MessageDigest messageDigest = MessageDigest.getInstance("MD5");
messageDigest.update(Files.readAllBytes(file.toPath()));
byte[] hash = messageDigest.digest();
return DatatypeConverter.printHexBinary(hash).toUpperCase();
}
public static void main(String argv[]) throws NoSuchAlgorithmException, IOException {
File file = new File("/Users/foo.bar/Documents/file.jar");
String hex = Checksum.generate(file);
System.out.printf("hex=%s\n", hex);
}
}
Beispielhafte Ausgabe:
hex=B117DD0C3CBBD009AC4EF65B6D75C97B
Google Guava bietet eine neue API. Finden Sie die unten:
public static HashCode hash(File file,
HashFunction hashFunction)
throws IOException
Computes the hash code of the file using hashFunction.
Parameters:
file - the file to read
hashFunction - the hash function to use to hash the data
Returns:
the HashCode of all of the bytes in the file
Throws:
IOException - if an I/O error occurs
Since:
12.0
Wenn Sie ANT zum Erstellen verwenden, ist dies kinderleicht. Fügen Sie das Folgende zu Ihrer build.xml hinzu:
<checksum file="${jarFile}" todir="${toDir}"/>
Dabei steht jarFile für die JAR-Datei, gegen die die MD5-Datei erzeugt werden soll, und toDir für das Verzeichnis, in dem die MD5-Datei abgelegt werden soll.
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.