md5 berechnen für BufferedImage

Hi,

ich habe einen hier gefundenen md5 Algorithmus umgebastelt:
Java:
	private byte[] createChecksum(BufferedImage fileImg) throws Exception {
		InputStream fis =  ???;
		byte[] buffer = new byte[1024];
		MessageDigest complete = MessageDigest.getInstance("MD5");
		int numRead;
		do {
			numRead = fis.read(buffer);
			if (numRead > 0) {
				complete.update(buffer, 0, numRead);
		 	}
	 	} while (numRead != -1);
		fis.close();
		return complete.digest();
	}    
    
	private String getMD5Checksum(BufferedImage fileImg) throws Exception {
		byte[] b = createChecksum(fileImg);
		String result = "";
		for (int i=0; i < b.length; i++) {
			result +=
				Integer.toString( ( b[i] & 0xff ) + 0x100, 16).substring( 1 );
		}
		return result;
	}
Dort wo die drei Fragezeichen stehen fehlt der Teil wo ich das BufferedImage in einen InputStream bekommen muss. Hat da Jemand eine Lösung?

Grüße Markus
 
Java:
	private byte[] createChecksum(byte[] inBytes) throws Exception {
		InputStream fis = new ByteArrayInputStream(inBytes);
		byte[] buffer = new byte[1024];
		MessageDigest complete = MessageDigest.getInstance("MD5");
		int numRead;
		do {
			numRead = fis.read(buffer);
			if (numRead > 0) {
				complete.update(buffer, 0, numRead);
			}
		} while (numRead != -1);
		fis.close();
		return complete.digest();
	}
	
	private byte[] createChecksum(BufferedImage fileImg) throws Exception {
		return createChecksum(((DataBufferByte)fileImg.getData().getDataBuffer()).getData());
		
	}

	private String getMD5Checksum(BufferedImage fileImg) throws Exception {
		byte[] b = createChecksum(fileImg);
		String result = "";
		for (int i = 0; i < b.length; i++) {
			result += Integer.toString((b[i] & 0xff) + 0x100, 16).substring(1);
		}
		return result;
	}
 
VIEL kürzere Version:
Java:
	private byte[] createChecksum(BufferedImage fileImg) throws Exception {
		MessageDigest complete = MessageDigest.getInstance("MD5");
		byte[] inBytes = ((DataBufferByte)fileImg.getData().getDataBuffer()).getData();
		complete.update(inBytes, 0, inBytes.length);
		return complete.digest();
	}

	private String getMD5Checksum(BufferedImage fileImg) throws Exception {
		byte[] b = createChecksum(fileImg);
		StringBuilder result = new StringBuilder();
		for (int i = 0; i < b.length; i++) {
			result.append(String.format("%02x",b[i]));
		}
		return result.toString();
	}
 
:meld:Kurze Anmerkung zur Konvertierung in Hexadezimal:

Java:
String md5Hash = (new BigInteger(1, b)).toString(16);
statt
StringBuilder result = new StringBuilder();
for (int i = 0; i < b.length; i++) {
result.append(String.format("%02x",b));
}
 
:meld:Kurze Anmerkung zur Konvertierung in Hexadezimal:

Java:
String md5Hash = (new BigInteger(1, b)).toString(16);
statt

Wieder was gelernt. Danke 😉


Nochmal kürzer:
Java:
private String getMD5Checksum(BufferedImage fileImg) throws Exception {
	byte[] inBytes = ((DataBufferByte)fileImg.getData().getDataBuffer()).getData();
	MessageDigest complete = MessageDigest.getInstance("MD5");
	complete.update(inBytes, 0, inBytes.length);
	return new BigInteger(1, complete.digest()).toString(16);
}
Ist allerdings auch nicht gut wiederverwendbar...
 
Zuletzt bearbeitet:
Falls du es nicht unbedingt selber machen musst nutze doch einfach Apache-Commons-Codec:

Code:
String md5hex = DigestUtils.md5Hex(byte[] data);
 

Neue Themen


Zurück
Oben