我想在我的Java应用程序中实现一些非常基本的安全性,但是一开始我就陷入了困境.
我想做的是这样的:
1-生成RSA密钥对
2将这些密钥以序列化形式存储在数据库中,以便在下次运行该应用程序时重新创建它们
3-反序列化它们,这样我就可以将它们恢复为对象形式,并可以使用它们来加密/解密内容.
问题是,在任何地方我都找不到直接的解释.
我尝试了标准的Java序列化/反序列化方法,但是它们不起作用.我的代码如下:
public static KeyPair Bin2KeyPair(byte[] data){
try{
ByteArrayInputStream b = new ByteArrayInputStream(data);
ObjectInputStream o = new ObjectInputStream(b);
Object obj =o.readObject();
return((KeyPair)obj);
}catch (Exception e) {
e.printStackTrace();
}
return null;
}
public static byte[] KeyPair2Bin(KeyPair kp){
ByteArrayOutputStream b = new ByteArrayOutputStream();
ObjectOutputStream o;
try {
o = new ObjectOutputStream(b);
o.writeObject(kp);
return b.toByteArray();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
我遇到的问题是第二种方法工作正常(将键序列化为字节数组),但是第一种方法失败,抛出ClassCastException,告诉我无法将对象转换为“ KeyPair”.
有关如何正确执行此操作的任何提示?
编辑:这是个例外(在第一种方法中,它会抛出“ return((KeyPair)obj);”):
java.lang.ClassCastException: [B cannot be cast to java.security.KeyPair
at DARCOServer.security.SecurityManager.String2KeyPair(SecurityManager.java:34)
at DARCOServer.security.SecurityManager.GenerateServerKeys(SecurityManager.java:122)
at DARCOServer.MainClass.main(MainClass.java:13)