2016-09-24 10 views
0

私はキャプチャ・ザ・フラッグ・コンテストに参加しています。私が取り組んでいる質問は、Javaオブジェクトの逆シリアル化に関するものです。私はbase64でエンコードされたクッキー文字列を調べています。私はそれをデコードするときに、値を変更してbase64で再エンコードするためにデシリアライズしたいJavaの直列化オブジェクトだと思います。java 8 base64でエンコードされた文字列を逆シリアル化する

私はJavaについて何も知らないが、私はbase64でデコードされたバイトを逆シリアル化しようとしましたが、これは間違ったタイプだと思います。

import java.util.Base64; 
import java.util.UUID; 
import java.io.UnsupportedEncodingException; 
import java.io.ObjectInputStream; 

public class decode { 
    public static void main(String args[]){ 
     try { 

     // Encode using basic encoder 
     String base64encodedString = "mybase64encodedstring=="; 
     System.out.println("Base64 encoded string :" + base64encodedString); 

     // Decode 
     byte[] base64decodedBytes = Base64.getDecoder().decode(base64encodedString); 

     ObjectInputStream in = new ObjectInputStream(base64decodedBytes); 
     System.out.println("Deserialised data: \n" + in.readObject().toString()); 

     System.out.println("Original String: " + new String(base64decodedBytes, "utf-8")); 


     }catch(UnsupportedEncodingException e){ 
     System.out.println("Error :" + e.getMessage()); 
     } 
    } 
} 

私が手にエラーがある:

互換性のない型:バイトは[]

すべてのヘルプは感謝のInputStreamに変換することはできません!

答えて

0

使用するByteArrayInputStream代わりのするObjectInputStream。代わりに、この

InputStream in = new ByteArrayInputStream(base64decodedBytes); 

そうで、これを使用

ObjectInputStream in = new ObjectInputStream(base64decodedBytes); 
+0

のようにそれらのバイト

から文字列を作成しても意味がありません面白いありがとう。どのようにしてデシリアライズされたデータを印刷するのですか? –

+0

実際に私はiveがそれを行う方法を見つけたと思う。出力はi base64で解読したときと同じように見えますが、つまり印刷できないASCII文字です。 –

+0

どの道路でも、あなたの答えは私の質問には正しいので、そのようにマークされています。ありがとう –

0

を@Hraboschは代わりにするByteArrayInputStream を使用すると述べました。データはObjectOuputStreamによって書き込まれたバイトの束であれば実際に、

aswellするByteArrayInputStream を使用する。また、それはそう

import java.util.Base64; 
import java.io.ByteArrayInputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.ObjectInputStream; 

public class Decode { 
    public static void main(String args[]){ 
     try { 

     // Encode using basic encoder 
     // I assume you replace this with actual data... 
     String base64encodedString = "mybase64encodedstring=="; 
     System.out.println("Base64 encoded string :" + base64encodedString); 

     // Decode 
     byte[] base64decodedBytes = Base64.getDecoder().decode(base64encodedString); 

     InputStream in = new ByteArrayInputStream(base64decodedBytes); 
     ObjectInputStream obin = new ObjectInputStream(in); 
     Object object = obin.readObject(); 
     System.out.println("Deserialised data: \n" + object.toString()); 

     // You could also try... 
     System.out.println("Object class is " + object.getClass().toString()); 

     // Don't do this!! The original data was not a string! 
     //System.out.println("Original String: " + new  String(base64decodedBytes, "utf-8")); 


     }catch(ClassNotFoundException | IOException e){ 
     System.out.println("Error :" + e.getMessage()); 
    } 
    } 
} 
+0

ありがとうございました。データを出力しようとするとエラーが発生し、何が起こっているかを確認するために作業しますが、私はあなたの情報で正しい軌道に乗っています。 –

関連する問題