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