java 序列化 加密_java – 可序列化对象的ArrayList的加密保存和解密加载

我使用这两种方法在sd卡中保存并加载包含可序列化对象的ArrayList的文件

保存方法

public static void saveUserList(ArrayList userList) {

if (storageAvailable()) {

try {

createFolder();

FileOutputStream userList = new FileOutputStream(

baseDir + File.separator + baseAppDir + File.separator

+ fileName);

ObjectOutputStream oos = new ObjectOutputStream(

userList);

oos.writeObject(userList);

oos.close();

} catch (Exception exc) {

exc.printStackTrace();

}

}

}

加载方法

public static ArrayList loadUserList() {

if (storageAvailable()) {

ArrayList userList = new ArrayList();

try {

FileInputStream userList = new FileInputStream(baseDir

+ File.separator + baseAppDir + File.separator

+ fileName);

ObjectInputStream oos = new ObjectInputStream(

userList);

userList = (ArrayList) oos.readObject();

oos.close();

} catch (Exception exc) {

exc.printStackTrace();

}

return userList;

} else {

return null;

}

}

现在我希望saveUserList方法在保存期间根据特定的String关键字加密文件的内容,方法loadUserList使用相同的关键字解密文件以返回arrayList.

我怎么能这样做?

我已经看了CipherOutputStream但是我还没有理解我应该如何使用它.

该方法建议使用Conceal库

public static void saveUserListCrypted(ArrayList userList) {

if (storageAvailable()) {

try {

createFolder();

Crypto crypto = new Crypto(

new SharedPrefsBackedKeyChain(context),

new SystemNativeCryptoLibrary());

FileOutputStream userList = new FileOutputStream(

baseDir + File.separator + baseAppDir + File.separator

+ fileName);

OutputStream cryptedStream = crypto.getCipherOutputStream(

userList, new Entity("UserList");

ObjectOutputStream oos = new ObjectOutputStream(

cryptedStream);

oos.writeObject(userList);

oos.close();

} catch (Exception exc) {

exc.printStackTrace();

}

}

}

导致此错误

this error java.lang.UnsupportedOperationException 02-12 21:29:05.026 2051-2051/com.myapp W/System.err﹕ at com.facebook.crypto.streams.NativeGCMCipherOutputStream.write

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java 中,List 对象可以通过序列化来进行持久化存储或网络传输。List 序列化的实现可以通过以下步骤: 1. 确保 List 中的元素都实现了 Serializable 接口。 2. 创建一个 ObjectOutputStream 对象,将 List 对象写入 ObjectOutputStream 中。 3. 关闭 ObjectOutputStream 对象。 4. 创建一个 ObjectInputStream 对象,从 ObjectInputStream 中读取 List 对象。 5. 关闭 ObjectInputStream 对象。 以下是一个简单的示例代码,演示了如何将 List 对象进行序列化和反序列化: ``` import java.io.*; import java.util.ArrayList; import java.util.List; public class ListSerializationDemo { public static void main(String[] args) throws IOException, ClassNotFoundException { List<String> list = new ArrayList<>(); list.add("Java"); list.add("Python"); list.add("C++"); // 序列化 List 对象 ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("list.ser")); oos.writeObject(list); oos.close(); // 反序列化 List 对象 ObjectInputStream ois = new ObjectInputStream(new FileInputStream("list.ser")); List<String> newList = (List<String>) ois.readObject(); ois.close(); System.out.println(newList); } } ``` 在上面的代码中,我们首先创建了一个 List 对象,并向其中添加了三个元素。然后我们使用 ObjectOutputStream 对象List 对象写入到一个名为 "list.ser" 的文件中。接着我们使用 ObjectInputStream 对象从 "list.ser" 文件中读取 List 对象,并将其转换为 List<String> 类型。最后,我们打印出了反序列化后的 List 对象,以确保序列化和反序列化过程都成功了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值