Question

I'm trying to construct an ObjectInputStream from a string but I'm getting a java.io.StreamCorruptedException:

My code:

public static final String PUBLIC_KEY = "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA7bO/38XhXYLJikoEEQ7s\naHKYcrrkD2Q+IWS6P0GOOvoX0rfRI6Hb30ETBE/ySzV6F9tpgtCbjU/w7tE8vmOy\nxQDwToUobbS+uZDi+F72PAY9NRKRogtY7YCwJuvAxNVmsTu9i/P/oA3qO3l0ge61\nZu3lMf4ujh969T9Dj0fjIdXQGewqk+ROB6UqoIEHTYi9wRdPlxDGnKTrORu5I5hH\n1xQfM0l49ME36G4u3Ipg5Y9Tqr1F8EL82GYeRoSX+xG+brQAdbjnQGrmrW/VFRkT\n9uL327vrRjiOit9yoTNtP3HYk1g5+Db7XdSNi+8KHZOQ3T2xcYFseXNnd7nIGj97\nBwIDAQAB\n-----END PUBLIC KEY-----";
public static final String PRIVATE_KEY_FILE = "C:/keys/private.key";


public static void test() {


 Log.d("DEBUG","Original Text: ");
try {

  final String originalText = "top secret text";
  ObjectInputStream inputStream = null;

  InputStream is = new ByteArrayInputStream(PUBLIC_KEY.getBytes());


  //Log.d("DEBUG","Original Text:3 " + convertStreamToString(is));
  // Encrypt the string using the public key
  inputStream = new ObjectInputStream(is);
  final PublicKey publicKey = (PublicKey) inputStream.readObject();
  final byte[] cipherText = encrypt(originalText, publicKey);

  // Decrypt the cipher text using the private key.
  inputStream = new ObjectInputStream(new ByteArrayInputStream(PRIVATE_KEY.getBytes()));
  final PrivateKey privateKey = (PrivateKey) inputStream.readObject();
  final String plainText = decrypt(cipherText, privateKey);

  // Printing the Original, Encrypted and Decrypted Text
  Log.d("DEBUG","Original Text: " + originalText);
  Log.d("DEBUG","Encrypted Text: " +cipherText.toString());
  Log.d("DEBUG","Decrypted Text: " + plainText);

} catch (Exception e) {
  e.printStackTrace();
}
  }

Could someone explain me what I am doing wrong ?

Was it helpful?

Solution

You write out serializable object(s), strings are serializable, first using the ObjectOutputStream to your storage and read the object(s) in using the ObjectInputStream.

You don't have any object in your byte array storage. That's the reason you are getting the stream corrupted exception.

Following is a very basic snippet to demo -

ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
String myStrObj = "Hello World";
oos.writeObject(myStrObj); //write the string as object
oos.close();


ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(baos.toByteArray()));
String readStrObj = (String) ois.readObject(); //read the string as object
ois.close();
System.out.println(readStrObj);

You can replace that Hello World with your public key and see what it prints out.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top