JAVA-如何从sqlite数据库存储和读取RSA公钥
我必须将公钥和私钥存储到sqlite数据库中。 实际上,我将pubKey.getEncoded()写入数据库,为了重新创建pubKey,我使用以下代码: 但它给了我以下的错误 线程“main”java.security.spec.InvalidKeySpecException:java.security.InvalidKeyException:IOException:检测过早的EOF 在这一点上: pubKey=(RSAPublicKey)rsaKeyFac.generatePublic(keySpec) 有人能帮我吗 先谢谢你JAVA-如何从sqlite数据库存储和读取RSA公钥,java,security,rsa,Java,Security,Rsa,我必须将公钥和私钥存储到sqlite数据库中。 实际上,我将pubKey.getEncoded()写入数据库,为了重新创建pubKey,我使用以下代码: 但它给了我以下的错误 线程“main”java.security.spec.InvalidKeySpecException:java.security.InvalidKeyException:IOException:检测过早的EOF 在这一点上: pubKey=(RSAPublicKey)rsaKeyFac.generatePublic(key
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,则需要使用不同的机制。
你说得对,但没有任何变化,错误仍然存在。查询正常工作。它应该是一个BLOB。使用的getEncoded()编码产生的字节数超过了可以产生的字节数,并且将跨越从0x00到0xff的整个范围,并且不能作为字符或字符串数据存储。Romain:您的代码与我的代码非常相似,结果也很相似,它不起作用。相同的异常。GregS:我尝试了blob类型,方法如下:>result.next();KeyFactory rsaKeyFac=null;rsaKeyFac=KeyFactory.getInstance(“RSA”);Blob pukey=result.getBlob(1);int leng=(int)pukey.length();X509EncodedKeySpec=newx509encodedkeyspec(pukey.getBytes(1,leng));RSAPublicKey-pubKey;pubKey=(RSAPublicKey)rsaKeyFac.generatePublic(keySpec);我有一个新的异常,它说:java.sql.SQLException:不是由SQLite JDBC驱动程序实现的,所以我认为blob异常是SQLite的限制。但问题仍然存在,我无法检索pubkey@米歇尔:如果pubkey存储为字符对象,那么它可能已被进程损坏。字符集是有限的,但公钥字节可以具有任何值。公钥应该存储为二进制类型,可能是BLOB。在MySQL中,有一种
VARBINARY
类型用于存储二进制数据。
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);
}