gpt4 book ai didi

java - 如何在 Java 中序列化和反序列化 RSA KeyPair

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:19:51 26 4
gpt4 key购买 nike

我想在我的 Java 应用程序中实现一些非常基本的安全性,但我在一开始就卡住了。

我想做的是:1-生成RSA key 对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;
}

我遇到的问题是第二种方法工作正常(将 key 序列化为字节数组)但第一种方法失败,抛出 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)

最佳答案

这对我有用:

@Test
public void serializeTest() throws Exception {

KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");
KeyPair keyPair = kpg.generateKeyPair();
ByteArrayOutputStream b = new ByteArrayOutputStream();
ObjectOutputStream o = new ObjectOutputStream(b);
o.writeObject(keyPair);
byte[] res = b.toByteArray();

o.close();
b.close();

ByteArrayInputStream bi = new ByteArrayInputStream(res);
ObjectInputStream oi = new ObjectInputStream(bi);
Object obj = oi.readObject();
assertTrue(obj instanceof KeyPair);

oi.close();
bi.close();
}

关于java - 如何在 Java 中序列化和反序列化 RSA KeyPair,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13894425/

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