如何从数据库中存储和读取公钥?我正在使用postgresql和java

如何从数据库中存储和读取公钥?我正在使用postgresql和java,java,database,postgresql,public-key-encryption,public-key,Java,Database,Postgresql,Public Key Encryption,Public Key,嗨,我需要从postgresql数据库中存储和读取公钥,我正在使用java 我有这个代码要存储 cbd.ejecutarSeguro("update persona set llave_publica = ? where cedula = 112345678", x509EncodedKeySpec.getEncoded()); public void ejecutarSeguro(String query, byte[] pkBytes) { try {

嗨,我需要从postgresql数据库中存储和读取公钥,我正在使用java

我有这个代码要存储

 cbd.ejecutarSeguro("update persona set llave_publica = ? where cedula = 112345678", x509EncodedKeySpec.getEncoded());


    public void ejecutarSeguro(String query, byte[] pkBytes) {
        try {
            Connection conn = DriverManager.getConnection(nombreConexion);
            PreparedStatement pstat;

            pstat = conn.prepareStatement(query);
            pstat.setBytes(1, pkBytes);
            pstat.execute();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
我用这个来阅读

String filePublicKey_s = cbd.consultarArray("Select llave_publica from persona where cedula = 112345678").get(0).get(0);
        byte[] encodedPublicKey = new byte[(int) filePublicKey.length()];
        //encodedPublicKey = (filePublicKey_s).substring(2).getBytes();
        System.out.println("Public Key; "+filePublicKey_s);
        System.out.println("rescato de la base; "+(filePublicKey_s).getBytes());// LA que rescato de la base
        fis.read(encodedPublicKey);
        System.out.println("Public Key; "+encodedPublicKey);
        fis.close();
在示例中,我的计算机中的文件中有公钥。。。当我比较输出时,我看到了这一点

Public Key: 308201b83082012c06072a8648ce3804013082011f02818100fd7f53811d75122952df4a9c2eece4e7f611b7523cef4400c31e3f80b6512669455d402251fb593d8d58fabfc5f5ba30f6cb9b556cd7813b801d346ff26660b76b9950a5a49f9fe8047b1022c24fbba9d7feb7c61bf83b57e7c6a8a6150f04fb83f6d3c51ec3023554135a169132f675f3ae2b61d72aeff22203199dd14801c70215009760508f15230bccb292b982a2eb840bf0581cf502818100f7e1a085d69b3ddecbbcab5c36b857b97994afbbfa3aea82f9574c0b3d0782675159578ebad4594fe67107108180b449167123e84c281613b7cf09328cc8a6e13c167a8b547c8d28e0a3ae1e2bb3a675916ea37f0bfa213562f1fb627a01243bcca4f1bea8519089a883dfe15ae59f06928b665e807b552564014c3bfecf492a038185000281810096e492622ca7f93f51b96d44f15e69f6711b1eecc308f4b017a0e12b46a722b1b662a072f0cdf61b6853595f66eed2e697a4ba2af60f4eb78a24a169513acc6238dcbf6dc898a271d7f91b4b6ea4d2a5c504ee6970c7cd565d414d14305c786385558f06e47f3d2744fa0d73acdc3ca75e435a3a70dcebb1f997a02e7e96ab30
Public Key; \x308201b83082012c06072a8648ce3804013082011f02818100fd7f53811d75122952df4a9c2eece4e7f611b7523cef4400c31e3f80b6512669455d402251fb593d8d58fabfc5f5ba30f6cb9b556cd7813b801d346ff26660b76b9950a5a49f9fe8047b1022c24fbba9d7feb7c61bf83b57e7c6a8a6150f04fb83f6d3c51ec3023554135a169132f675f3ae2b61d72aeff22203199dd14801c70215009760508f15230bccb292b982a2eb840bf0581cf502818100f7e1a085d69b3ddecbbcab5c36b857b97994afbbfa3aea82f9574c0b3d0782675159578ebad4594fe67107108180b449167123e84c281613b7cf09328cc8a6e13c167a8b547c8d28e0a3ae1e2bb3a675916ea37f0bfa213562f1fb627a01243bcca4f1bea8519089a883dfe15ae59f06928b665e807b552564014c3bfecf492a038185000281810096e492622ca7f93f51b96d44f15e69f6711b1eecc308f4b017a0e12b46a722b1b662a072f0cdf61b6853595f66eed2e697a4ba2af60f4eb78a24a169513acc6238dcbf6dc898a271d7f91b4b6ea4d2a5c504ee6970c7cd565d414d14305c786385558f06e47f3d2744fa0d73acdc3ca75e435a3a70dcebb1f997a02e7e96ab30
From data base; [B@6a162595
From file; [B@53fd8f9
如果我从数据库中读取PK,我将读取\x和所有PK更改


谢谢

您可以存储在Blob中,您可以读取公钥文件并获取java公钥对象。您可以直接将此公钥对象作为blob存储在数据库中。首先要做:

 byte [] bytes = publicKey.getEncoded();
然后将字节存储在数据库中。 要检索公钥,请执行以下操作:

public PublicKey blobToPublicKey(final byte[] blob) 
    {
        Object result = null;
        final ByteArrayInputStream bais = new ByteArrayInputStream(blob);
        ObjectInputStream ois;
        try
        {
            ois = new ObjectInputStream(bais);
            result = ois.readObject();
        }
        catch (final IOException e)
        {
           //
        }
        catch (final ClassNotFoundException e)
        {
           //
        }
        return (PublicKey)result;
    }

您可以存储在Blob中,您可以读取公钥文件并获取java公钥对象。您可以直接将此公钥对象作为blob存储在数据库中。首先要做:

 byte [] bytes = publicKey.getEncoded();
然后将字节存储在数据库中。 要检索公钥,请执行以下操作:

public PublicKey blobToPublicKey(final byte[] blob) 
    {
        Object result = null;
        final ByteArrayInputStream bais = new ByteArrayInputStream(blob);
        ObjectInputStream ois;
        try
        {
            ois = new ObjectInputStream(bais);
            result = ois.readObject();
        }
        catch (final IOException e)
        {
           //
        }
        catch (final ClassNotFoundException e)
        {
           //
        }
        return (PublicKey)result;
    }

将公钥转换为字节数组

    byte[] bytes = publicKey.getEncoded();
将字节写入BLOB或二进制列

...              
PreparedStatement ps = conn.prepareStatement("update tbl1 set col1=?");
ps.setBytes(1, bytes);
ps.executeUpdate();
将其读回字节数组

...
byte[] bytes = resultSet.getBytes(1);
将字节转换回公钥

KeyFactory keyFactory = KeyFactory.getInstance(alg);
X509EncodedKeySpec publicKeySpec = new X509EncodedKeySpec(bytes);
PublicKey pk = keyFactory.generatePublic(publicKeySpec);

将公钥转换为字节数组

    byte[] bytes = publicKey.getEncoded();
将字节写入BLOB或二进制列

...              
PreparedStatement ps = conn.prepareStatement("update tbl1 set col1=?");
ps.setBytes(1, bytes);
ps.executeUpdate();
将其读回字节数组

...
byte[] bytes = resultSet.getBytes(1);
将字节转换回公钥

KeyFactory keyFactory = KeyFactory.getInstance(alg);
X509EncodedKeySpec publicKeySpec = new X509EncodedKeySpec(bytes);
PublicKey pk = keyFactory.generatePublic(publicKeySpec);