我必须将公共密钥和私有密钥存储到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);

但这给了我以下错误

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

这一点 :

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

有人可以帮助我吗?

先感谢您

最佳答案

如果您在这里:http://java.sun.com/docs/books/tutorial/jdbc/basics/retrieving.html,您将看到如何正确地从数据库中检索。假设您的DB列具有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

09-13 11:59