我必须将公钥和私钥存储到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);
任何人都可以帮助我?
提前谢谢
答案 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)
当您第一次获得ResultSet时,光标指向之前的空间第一行结果。所以你需要在尝试检索数据之前调用next()。
您应该确保查询确实成功。