2012-03-12 12 views
1

このコードでは例外を検出できません。コードのコメントで手がかりを探してください。どうやら私はシリアル化メソッドのコードを貼り付けることはありませんので、シリアル化は正常に動作しました。暗号化されたオブジェクトリストの逆シリアル化

public class NewCipher { 

    private static final String password = "somestatickey"; 
    private Cipher desCipher; 
    private SecretKey secretKey; 
    private Context ctx; 

    public NewCipher(Context ctx) throws Exception { 

     this.ctx = ctx; 
     // Create Key 
     byte key[] = password.getBytes(); 
     DESKeySpec desKeySpec = new DESKeySpec(key); 
     SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES"); 
     secretKey = keyFactory.generateSecret(desKeySpec); 

     // Create Cipher 
     desCipher = Cipher.getInstance("DES/ECB/PKCS5Padding"); 

    } 

トリッキーな部分はここから:

public ArrayList<Category> loadCategories(){ 
    try { 
     try { 
      // Change cipher mode 
      desCipher.init(Cipher.DECRYPT_MODE, secretKey); //some uncatchable exception seems to be appearing here 

      // Create stream     
      FileInputStream fis; 
      fis = ctx.openFileInput("categories.des");   
      BufferedInputStream bis = new BufferedInputStream(fis); 
      CipherInputStream cis = new CipherInputStream(bis, desCipher); 
      ObjectInputStream ois = new ObjectInputStream(cis); 

      try { 
       // Read objects   
       ArrayList<Category> categories = (ArrayList<Category>) ois.readObject(); //however the debugger goes right to this line and then goes to the finally, and then straight to final catch block 
       return categories; //not beeing executed 

      } 
      finally { 
       ois.close(); //debugger does a step here and then jumps to the end 
      } 
     } 
     catch(GeneralSecurityException ex) { 
      Log.v("Debug", "Some message", ex); //not beeing executed 
      return null; //not beeing executed 
     }   

    } catch (Exception e) { 
     Log.v("Debug", "Some message", e); //not beeing executed 
     return null; //actually the debugger jumps right here avoiding the log line above 
    } 
} 

は、どのように私はその問題がラインdesCipher.init(Cipher.DECRYPT_MODE, secretKey);である知っているのですか?私は1行ずつ削除していて、いつも同じ結果を得ました。最初の行で何か間違っていたはずです。

私はそれをキャッチすることができません。何らかの理由でコードがさらに実行されようとしています。私は完全にここで混乱している。私はGeneralSecurityExceptionの代わりにIOExceptionIllegalStateExceptionを試しました。また、BadPaddingExceptionをスローしようとしました。しかし、ログはありません。

お願いします。

+0

'' Log.v( "Debug"、 "Some message"、e); 'は、どのような例外であるかを示します。それは最初のステップだ – njzk2

+0

問題は、行が実行されていないということです。 –

+0

例外ではなくThrowableをキャッチします。 – njzk2

答えて

0

キーのサイズが正しくない場合、コードにはGeneralSecurityException型のInvalidKeyExceptionがスローされます。デバッグする前に、コードがコンパイルされ、生成されたクラスファイルと同期していることを確認してください。

文字列をパスワードとして使用しないでください。エンコードを指定せずにgetBytes()を使用しないでください。DESを使用しないでください.ECBモード(など)を使用しないでください。

関連する問題