JAVA-如何从sqlite数据库中存储和读取RSA公钥密码
我必须将公钥和私钥存储到sqlite数据库中。 其实我写的pubKey.getEncoded()到数据库中,并重新创建我使用下面的代码PUBKEY:JAVA-如何从sqlite数据库中存储和读取RSA公钥密码
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);
任何人都可以帮到我吗?
预先感谢您
当你第一次得到一个结果,将光标指向空间之前结果的第一行。所以你需要在尝试检索数据之前调用next()。
您应该确保查询真正成功。
如果你看这里: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
它应该是一个BLOB。所使用的getEncoded()编码产生的字节数超过了可以使用的范围,并且将覆盖从0x00到0xff的整个范围,并且不能存储为字符或字符串数据。 – 2010-07-04 15:32:44
Romain: 您的代码与我的代码非常相似,结果也是类似的,它不起作用。同样的例外。 – michele 2010-07-04 23:54:36
GregS: 我用blob类型尝试过,方法如下: > result.next(); KeyFactory rsaKeyFac = null; rsaKeyFac = KeyFactory.getInstance(“RSA”); Blob pukey = result.getBlob(1); int leng =(int)pukey.length(); X509EncodedKeySpec keySpec = new X509EncodedKeySpec(pukey.getBytes(1,leng)); RSAPublicKey pubKey; pubKey =(RSAPublicKey)rsaKeyFac.generatePublic(keySpec); 我有一个新的例外说: java.sql.SQLException:没有实施的SQLite JDBC驱动程序 所以我认为blob异常是一个sqlite的限制。 但问题仍然存在,我无法找回公钥! – michele 2010-07-04 23:55:30
你说得对,但没有任何变化,错误仍然存在 查询正常工作 – michele 2010-07-03 17:26:01