繁体   English   中英

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

[英]JAVA - How to store and read an RSA public key from an sqlite db

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

有人可以帮帮我吗?

先感谢您

如果您在这里查看: 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. 首次获取ResultSet时,光标指向第一行结果的空格。 所以你需要在尝试检索数据之前调用next()。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM