Reputation: 2832
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 ?
Upvotes: 5
Views: 4536
Reputation: 51030
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.
Upvotes: 5