JAVA - 如何从sqlite db存储和读取RSA公钥

时间:2010-07-03 16:43:28

标签: java security rsa

我必须将公钥和私钥存储到sqlite数据库中。 实际上我将pubKey.getEncoded()写入数据库,并重新创建pubkey我使用以下代码:

    ResultSet result = stat.executeQuery("select publickey from cert where id='1'");
    KeyFactory rsaKeyFac =  KeyFactory.getInstance("RSA");
    X509EncodedKeySpec keySpec = new X509EncodedKeySpec(result.getBytes(1));
    RSAPublicKey pubKey;
    pubKey = (RSAPublicKey) rsaKeyFac.generatePublic(keySpec);

但是它给了我以下错误

  

线程“main”中的异常java.security.spec.InvalidKeySpecException:java.security.InvalidKeyException:IOException:检测过早的EOF

此时:

  

pubKey =(RSAPublicKey)rsaKeyFac.generatePublic(keySpec);

任何人都可以帮助我?

提前谢谢

2 个答案:

答案 0 :(得分:2)

如果你看这里:http://java.sun.com/docs/books/tutorial/jdbc/basics/retrieving.html,你会看到如何从数据库中正确检索。假设您的数据库列有一个char(n)类型。

ResultSet result = stat.executeQuery("select publickey from cert where id='1'");
while(result.next())
{
   KeyFactory rsaKeyFac =  KeyFactory.getInstance("RSA");
   X509EncodedKeySpec keySpec = new X509EncodedKeySpec(result.getString(1));
   RSAPublicKey pubKey;
   pubKey = (RSAPublicKey) rsaKeyFac.generatePublic(keySpec);
}

如果类型是BLOB或CLOB,那么您需要使用不同的机制。 http://java.sun.com/j2se/1.5.0/docs/guide/jdbc/blob.html

答案 1 :(得分:0)

  1. 当您第一次获得ResultSet时,光标指向之前的空间第一行结果。所以你需要在尝试检索数据之前调用next()。

  2. 您应该确保查询确实成功。