在做文件加密时,需要将私钥保存到本地,我在使用writeNewObject是老是报错,说是没有序列化
网上百度了一下,发现在Java中要保存对象的话,必须是序列化,但是找了一下PrivateKey好像已经是序列化了,但是就是不行,
没办法只好采取存二进制数据流的办法了
以下是解决的代码
filename是我自己的参数,不用管它。
/**
* 读privatekey对象
*/
public PrivateKey getPrivateKey(String filename) {
PrivateKey privateKey=null;
SharedPreferences preferences = context.getSharedPreferences("base64",Context.MODE_PRIVATE);
String privateKeyBase64 = preferences.getString(filename, "");
//Log.d("get",filename+" ; "+privateKeyBase64 );
if (privateKeyBase64 == "") {
return null;
}
//读取字节
byte[] base64 = Base64.decodeBase64(privateKeyBase64.getBytes());
KeyFactory keyFactory;
try {
keyFactory = KeyFactory.getInstance("RSA");
PKCS8EncodedKeySpec pKCS8EncodedKeySpec =new PKCS8EncodedKeySpec(base64);
privateKey = keyFactory.generatePrivate(pKCS8EncodedKeySpec);
//Log.d("get",filename+" ; "+privateKey.toString() );
} catch (InvalidKeySpecException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} // 指定算法RSA,得到一个KeyFactory的实例
return privateKey;
}
/**
* 设置privatekey对象
*/
public void savePrivateKey(String filename,PrivateKey privateKey) {
SharedPreferences preferences = context.getSharedPreferences("base64",Context.MODE_PRIVATE);
//将字节流编码成base64的字符窜
String privateKeyBase64 = new String(Base64.encodeBase64(privateKey.getEncoded()));
Editor editor = preferences.edit();
editor.putString(filename, privateKeyBase64);
editor.commit();
}