このコードでは例外を検出できません。コードのコメントで手がかりを探してください。どうやら私はシリアル化メソッドのコードを貼り付けることはありませんので、シリアル化は正常に動作しました。暗号化されたオブジェクトリストの逆シリアル化
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
の代わりにIOException
とIllegalStateException
を試しました。また、BadPaddingExceptionをスローしようとしました。しかし、ログはありません。
お願いします。
'' Log.v( "Debug"、 "Some message"、e); 'は、どのような例外であるかを示します。それは最初のステップだ – njzk2
問題は、行が実行されていないということです。 –
例外ではなくThrowableをキャッチします。 – njzk2