Hi,
ich habe einen ganz kleinen Code um eine XML Datei mit einem Hash zu versehen um sie vor Änderungen zu schützen.
Leider macht diese App dann unter Linux alles so wie cih es möchte, unter Windows zernagelt es mir aber die Sonderzeichen. Warum? FileInPut und Outputstresm sind doch Charset unabhängig oder nicht? Und UTF-8 sollte auf allen Systemen auch gleich sein.
Gruß
Claus
ich habe einen ganz kleinen Code um eine XML Datei mit einem Hash zu versehen um sie vor Änderungen zu schützen.
Java:
System.out.println("Validating file "+file.getName()+"...");
try
{
FileInputStream iStream = new FileInputStream(file);
if(iStream!=null)
{
byte[] data = new byte[(int)file.length()];
iStream.read(data);
iStream.close();
if(data!=null && data.length!=0)
{
String fileContent = new String(data, "UTF-8");
int hashStart=fileContent.indexOf("<Hash>");
if(hashStart!=-1)
{
int hashEnd=fileContent.indexOf("</Hash>");
if(hashEnd!=-1)
fileContent=fileContent.substring(0, hashStart)+fileContent.substring(hashEnd+7);
}
String xml=fileContent;
xml=xml.substring(0, 8)+salt+xml.substring(9);
xml = xml.replaceAll("\\r|\\n", "");
String xmlHash=org.apache.commons.codec.digest.DigestUtils.sha512Hex(xml);
int endTag=fileContent.indexOf("</CheckParameter");
if(endTag==-1)
endTag=fileContent.indexOf("</PrintTemplate");
if(endTag==-1)
endTag=fileContent.indexOf("</GlobalSettings");
if(endTag!=-1)
{
String content=fileContent.substring(0,endTag)+"<Hash>"+xmlHash+"</Hash>"+fileContent.substring(endTag);
try
{
FileOutputStream oStream = new FileOutputStream(file);
if(oStream!=null)
{
oStream.write(content.getBytes(), 0, content.getBytes().length);;
oStream.close();
System.out.println("done.");
}
}
catch (IOException iox)
{
System.out.println("failed!");
iox.printStackTrace();
}
}
else
System.out.println("failed!");
}
else
System.out.println("failed!");
}
}
catch (IOException e)
{
System.out.println(e.getMessage());
System.out.println("failed!");
}
Leider macht diese App dann unter Linux alles so wie cih es möchte, unter Windows zernagelt es mir aber die Sonderzeichen. Warum? FileInPut und Outputstresm sind doch Charset unabhängig oder nicht? Und UTF-8 sollte auf allen Systemen auch gleich sein.
Gruß
Claus
Zuletzt bearbeitet von einem Moderator: