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?
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();
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.
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
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/
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 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.