gpt4 book ai didi

java - 反序列化加密的对象列表

转载 作者:行者123 更新时间:2023-12-01 05:25:57 25 4
gpt4 key购买 nike

我无法捕获此代码的异常。在代码注释中查找线索。显然序列化工作得很好,所以我不会粘贴序列化方法代码。

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); 行中?我一行一行地删除,总是得到相同的结果。第一行肯定发生了一些错误。

不幸的是,我无法捕获它,并且由于某种原因,代码试图进一步执行。我在这里完全困惑了。我尝试用 IOExceptionIllegalStateException 代替 GeneralSecurityException。还尝试抛出 BadPaddingException。但没有日志。

拜托,我需要这方面的帮助。

最佳答案

您的 key 大小不正确,代码应抛出 InvalidKeyException,其类型为 GeneralSecurityException。在调试之前,请确保您的代码已编译并与生成的类文件同步。

请注意,您永远不应该使用字符串作为密码,永远不应该在不指定编码的情况下使用 getBytes(),不应该使用 DES,不应该使用 ECB 模式(等等)。

关于java - 反序列化加密的对象列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9675115/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com