576 Stimmen

Abrufen der MD5-Prüfsumme einer Datei in Java

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?

46voto

ColinD Punkte 106101

Guave bietet jetzt eine neue, konsistente Hashing-API, die viel benutzerfreundlicher ist als die verschiedenen Hashing-APIs im JDK. Siehe Hashing erklärt . Für eine Datei können Sie die MD5-Summe, CRC32 (mit Version 14.0+) oder viele andere Hashes leicht ermitteln:

HashCode md5 = Files.hash(file, Hashing.md5());
byte[] md5Bytes = md5.asBytes();
String md5Hex = md5.toString();

HashCode crc32 = Files.hash(file, Hashing.crc32());
int crc32Int = crc32.asInt();

// the Checksum API returns a long, but it's padded with 0s for 32-bit CRC
// this is the value you would get if using that API directly
long checksumResult = crc32.padToLong();

34voto

MickJ Punkte 2029

Ok. Ich musste etwas hinzufügen. Einzeilige Implementierung für diejenigen, die bereits Spring und Apache Commons-Abhängigkeit haben oder planen, es hinzuzufügen:

DigestUtils.md5DigestAsHex(FileUtils.readFileToByteArray(file))

Für und Apache Commons nur Option (Kredit @duleshi):

DigestUtils.md5Hex(FileUtils.readFileToByteArray(file))

Ich hoffe, das hilft jemandem.

28voto

sunil Punkte 6196

Ein einfacher Ansatz ohne Bibliotheken von Drittanbietern mit Java 7

String path = "your complete file path";
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(Files.readAllBytes(Paths.get(path)));
byte[] digest = md.digest();

Wenn Sie dieses Byte-Array drucken müssen. Verwenden Sie wie unten

System.out.println(Arrays.toString(digest));

Wenn Sie eine Hex-Zeichenkette aus diesem Digest benötigen. Verwenden Sie wie unten

String digestInHex = DatatypeConverter.printHexBinary(digest).toUpperCase();
System.out.println(digestInHex);

wobei DatatypeConverter javax.xml.bind.DatatypeConverter ist

14voto

Jam Punkte 121
public static void main(String[] args) throws Exception {
    MessageDigest md = MessageDigest.getInstance("MD5");
    FileInputStream fis = new FileInputStream("c:\\apache\\cxf.jar");

    byte[] dataBytes = new byte[1024];

    int nread = 0;
    while ((nread = fis.read(dataBytes)) != -1) {
        md.update(dataBytes, 0, nread);
    };
    byte[] mdbytes = md.digest();
    StringBuffer sb = new StringBuffer();
    for (int i = 0; i < mdbytes.length; i++) {
        sb.append(Integer.toString((mdbytes[i] & 0xff) + 0x100, 16).substring(1));
    }
    System.out.println("Digest(in hex format):: " + sb.toString());
}

Oder Sie können mehr Informationen erhalten http://www.asjava.com/core-java/java-md5-example/

14voto

Brian Gianforcaro Punkte 25503

Kürzlich musste ich dies nur für eine dynamische Zeichenfolge tun, MessageDigest kann die Raute auf zahlreiche Arten darstellen. Um die Signatur der Datei zu erhalten, wie Sie es mit dem md5sum Befehl musste ich so etwas wie das hier tun:

try {
   String s = "TEST STRING";
   MessageDigest md5 = MessageDigest.getInstance("MD5");
   md5.update(s.getBytes(),0,s.length());
   String signature = new BigInteger(1,md5.digest()).toString(16);
   System.out.println("Signature: "+signature);

} catch (final NoSuchAlgorithmException e) {
   e.printStackTrace();
}

Das beantwortet natürlich nicht Ihre Frage, wie man es speziell für eine Datei macht, die obige Antwort geht darauf sehr gut ein. Ich habe nur viel Zeit damit verbracht, die Summe so darzustellen, wie sie von den meisten Anwendungen angezeigt wird, und dachte, Sie könnten auf die gleichen Probleme stoßen.

CodeJaeger.com

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.

Powered by:

X