Java Serialization

Seite 1 von 1 - Forum: Coding Stuff auf overclockers.at

URL: https://www.overclockers.at/coding-stuff/java_serialization_180101/page_1 - zur Vollversion wechseln!


ica schrieb am 14.05.2007 um 15:26

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();
	}

funktioniert aber leider nicht:

Code:
java.io.StreamCorruptedException: invalid stream header: 626C6168
	at java.io.ObjectInputStream.readStreamHeader(Unknown Source)
	at java.io.ObjectInputStream.<init>(Unknown Source)

Weiss jemand was ich falsch mache? Der Fehler tritt in der Zeile ois = new ObjectInputStream(bis) auf.


DKCH schrieb am 14.05.2007 um 15:33

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.


vossi schrieb am 29.05.2007 um 19:09

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);


gue schrieb am 30.05.2007 um 12:26

Aus dem Java Cryptography Extension Reference Guide:

Zitat
The 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");
hth




overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2026