Hi,
ich erzeuge eine Zip-Datei aus mehreren bestehenden PDF-Dokumenten. Muss nicht eigentlich die Checksumme des ZipFiles immer gleich sein, egal wie oft ich die ZIP-Datei erzeuge? Warum sind die Checksummen verschieden?
Code zum Erzeugen der ZIP-Files
für die Checksumme
Vielleicht weiß einer von euch ja, warum das so ist bzw. was kann ich tun, damit ich für alle PDFs eine immer gleiche Checksumme bekomme?
Grüße,
Peter
ich erzeuge eine Zip-Datei aus mehreren bestehenden PDF-Dokumenten. Muss nicht eigentlich die Checksumme des ZipFiles immer gleich sein, egal wie oft ich die ZIP-Datei erzeuge? Warum sind die Checksummen verschieden?
Code zum Erzeugen der ZIP-Files
Java:
public static synchronized void zipDocuments(String zipArchiveName, String fileDir,List<Documents> documents,boolean byId)
{
ZipOutputStream zos = null;
FileInputStream fis = null;
byte[] buff = new byte[TenderUtils.MAX_FILE_SIZE];
int bytesRead = 0;
try
{
zos = new ZipOutputStream(new FileOutputStream(zipArchiveName));
zos.setLevel(Deflater.BEST_COMPRESSION);
for (Documents docs : documents)
{
if(docs.getFileSize() == 0)
continue;
String entryName = "";
if(byId)
entryName = docs.getId()+"."+docs.getMimeType();
else
entryName = docs.getFileName();
ZipEntry entry = new ZipEntry(entryName);
zos.putNextEntry(entry);
fis = new FileInputStream(new File(fileDir + docs.getId()));
while(-1 != (bytesRead = fis.read(buff, 0, buff.length)))
zos.write(buff, 0, bytesRead);
zos.closeEntry();
}
} catch (IOException e)
{
logger.error(e.getMessage());
}
finally
{
IOUtils.closeQuietly(zos);
IOUtils.closeQuietly(fis);
}
}
für die Checksumme
Java:
public class MD5Checksum
{
private static final Logger logger = Logger.getLogger(MD5Checksum.class);
public static byte[] createChecksum(String filename) throws Exception
{
FileInputStream fis = new FileInputStream(filename);
MessageDigest md5 = MessageDigest.getInstance("MD5");
md5.reset();
int len = 0;
byte[] buffer = new byte[8192];
while( (len = fis.read(buffer)) > 0)
md5.update(buffer, 0, len);
return md5.digest();
}
public static String getMD5Checksum(String filename) throws Exception
{
byte[] b = createChecksum(filename);
String result = new String(Hex.encodeHex(b));
return result;
}
}
Vielleicht weiß einer von euch ja, warum das so ist bzw. was kann ich tun, damit ich für alle PDFs eine immer gleiche Checksumme bekomme?
Grüße,
Peter