Hallo!
Ich kann meine Projektfiles im Klartext als XML oder verschlüsselt über einen CipherInput/OutputStream schreiben. Die verschlüsselte Variante klappt auf einmal (wurde länger nicht verwendet) nicht mehr, es sieht so aus, als wären Zeichen abgeschnitten.
Die Initialisierung der Streams:
Laden (nutzt den gleichen SaxHandler wie die Klartext-Variante):
Der Fehler tritt kurz vor dem Ende auf, wenn ich mir statt zu parsen das Ding ausgeben lasse, ist Schluss bei
Es käme noch:
Wobei alle Filter vorher mit der gleichen Routine korrekt geschrieben/gelesen werden konnten.
Schreiben (gleicher String wie Klartext-Variante):
Durch die Verschlüsselung sehe ich ja noch nicht mal, ob der Fehler beim Schreiben oder Lesen passiert.
Irgendwelche Ideen?
Ich kann meine Projektfiles im Klartext als XML oder verschlüsselt über einen CipherInput/OutputStream schreiben. Die verschlüsselte Variante klappt auf einmal (wurde länger nicht verwendet) nicht mehr, es sieht so aus, als wären Zeichen abgeschnitten.
Die Initialisierung der Streams:
Java:
final byte[] salt = {(byte) ...};
final char[] c = { ...};
final KeySpec keySpec = new PBEKeySpec(c, salt, 19);
final SecretKey key = SecretKeyFactory.getInstance(
"PBEWithMD5AndDES").generateSecret(keySpec);
ecipher = Cipher.getInstance(key.getAlgorithm());
dcipher = Cipher.getInstance(key.getAlgorithm());
final AlgorithmParameterSpec paramSpec = new PBEParameterSpec(salt,
19);
ecipher.init(Cipher.ENCRYPT_MODE, key, paramSpec);
dcipher.init(Cipher.DECRYPT_MODE, key, paramSpec);
Laden (nutzt den gleichen SaxHandler wie die Klartext-Variante):
Java:
fis = new FileInputStream(fileName);
cis = new CipherInputStream(fis, dcipher);
final SAXParser saxParser = factory.newSAXParser();
saxParser.parse(new InputSource(cis),
new ProjectXmlHandler(project));
Code:
SEVERE: Error loading project: com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException
[com.sun.org.apache.xerces.internal.impl.io.UTF8Reader.invalidByte(UTF8Reader.java:684),
com.sun.org.apache.xerces.internal.impl.io.UTF8Reader.read(UTF8Reader.java:369),
com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.load(XMLEntityScanner.java:1742),
com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.arrangeCapacity(XMLEntityScanner.java:1619),
com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.skipString(XMLEntityScanner.java:1657),
com.sun.org.apache.xerces.internal.impl.XMLVersionDetector.determineDocVersion(XMLVersionDetector.java:193),
com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:771),
com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737),
com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:107),
com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205),
com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522),
javax.xml.parsers.SAXParser.parse(SAXParser.java:395),
zebra.project.EncryptedProjectIO.loadFromFile(EncryptedProjectIO.java:124),
...
Code:
<filter type="zebra.filter.MinMaxFilter" name="Glatt%40MM25" position="220,360,80,60" color="255,200,0" >
<input filter="avg%40MM25" port="default" />
<param key="AVERAGE" value="25"/>
</filter
Code:
>
</project>
Schreiben (gleicher String wie Klartext-Variante):
Java:
FileOutputStream fos = new FileOutputStream(fileName);
final OutputStream writer = new CipherOutputStream(fos, ecipher);
try {
writer.write(XmlProjectIO.getProjectXml(project).getBytes("UTF-8")); //oder ohne Angabe, macht keinen Unterschied
writer.flush();
}
Durch die Verschlüsselung sehe ich ja noch nicht mal, ob der Fehler beim Schreiben oder Lesen passiert.
Irgendwelche Ideen?
Zuletzt bearbeitet von einem Moderator: