URL: https://www.overclockers.at/coding-stuff/java_serialization_180101/page_1 - zur Vollversion wechseln!
Hab folgendes Problem: muss in Java einen bestehenden SecretKey verwenden um etwas zu entschlüsseln (DES oder AES...spielt keine Rolle im Moment).
Nachdem man SecretKeys leider nunmal nicht so einfach erstellen kann dachte ich mir ich probiers per serialization.
Code:SecretKey key = null; ObjectInputStream ois = null; ByteArrayInputStream bis = new ByteArrayInputStream("blah".getBytes()); try { ois = new ObjectInputStream(bis); ois.close(); key = (SecretKey)ois.readObject(); } catch(IOException ex) { ex.printStackTrace(); }
Code:java.io.StreamCorruptedException: invalid stream header: 626C6168 at java.io.ObjectInputStream.readStreamHeader(Unknown Source) at java.io.ObjectInputStream.<init>(Unknown Source)
close() vor readObject schaut mal ned gut aus imho.
dein problem: das byte[], das dem ByteArrayInputStream übergeben wird, ist der Buffer, den der ObjectInputStream nachher deserialisiert - sprich du willst "blah" als Objekt betrachten, was nicht funktionieren wird (62 = ascii code für "b" als hex, 6c=code für "l")...
du willst vermutlich einen fileinputstream verwenden.
http://www.google.at/search?q=java+...lient=firefox-a
sollte doch genau das sein was du willst oder?
danach kannste immer noch SecretKey key = new SecretKey(strKey);
Aus dem Java Cryptography Extension Reference Guide:
hthZitatThe following is an example of how to use a SecretKeyFactory to convert secret key data into a SecretKey object, which can be used for a subsequent Cipher operation:
// Note the following bytes are not realistic secret key data
// bytes but are simply supplied as an illustration of using data
// bytes (key material) you already have to build a DESKeySpec.
byte[] desKeyData = { (byte)0x01, (byte)0x02, (byte)0x03,
(byte)0x04, (byte)0x05, (byte)0x06, (byte)0x07, (byte)0x08 };
DESKeySpec desKeySpec = new DESKeySpec(desKeyData);
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
SecretKey secretKey = keyFactory.generateSecret(desKeySpec);
In this case, the underlying implementation of secretKey is based on the provider of keyFactory.
An alternative, provider-independent way of creating a functionally equivalent SecretKey object from the same key material is to use the javax.crypto.spec.SecretKeySpec class, which implements the javax.crypto.SecretKey interface:
byte[] desKeyData = { (byte)0x01, (byte)0x02, ...};
SecretKeySpec secretKey = new SecretKeySpec(desKeyData, "DES");
overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2026