Java 如何将字节数组转换为PrivateKey或PublicKey类型?

Java 如何将字节数组转换为PrivateKey或PublicKey类型?,java,cryptography,private-key,public-key,jce,Java,Cryptography,Private Key,Public Key,Jce,我正在使用RSA算法生成公钥和私钥 final KeyPairGenerator keyGen = KeyPairGenerator.getInstance(ALGORITHM); keyGen.initialize(1024); final KeyPair key = keyGen.generateKeyPair(); final PrivateKey privateKey=key.getPrivate(); final PublicKey publickey=key.getPublic();

我正在使用RSA算法生成公钥和私钥

final KeyPairGenerator keyGen = KeyPairGenerator.getInstance(ALGORITHM);
keyGen.initialize(1024);
final KeyPair key = keyGen.generateKeyPair();
final PrivateKey privateKey=key.getPrivate();
final PublicKey publickey=key.getPublic();
之后,使用Base64编码器对这些密钥进行编码,并将其保存到数据库中

在java中,如何将这个编码字符串转换为私钥和公钥类型是对文件进行解密。
使用Base64解码此字符串时,解码器将获得一个字节数组。如何将此字节数组转换为公钥或私钥类型?

如果在密钥上有一个字节[]表示getEncoded()的输出,则可以使用KeyFactory将其转换回公钥对象或私钥对象

byte[] privateKeyBytes;
byte[] publicKeyBytes;
KeyFactory kf = KeyFactory.getInstance("RSA"); // or "EC" or whatever
PrivateKey privateKey = kf.generatePrivate(new PKCS8EncodedKeySpec(privateKeyBytes));
PublicKey publicKey = kf.generatePublic(new X509EncodedKeySpec(publicKeyBytes));

我已经搜索了2天,寻找如何将RSA密钥转换为字符串并返回,这是唯一一篇有有效解决方案的帖子。谢谢你,先生!您不能将对象名指定为“public”或“private”。请注意,键上的getEncoded()不能告诉您编码是什么。键接口有getFormat(),它返回一个指示格式的字符串,但是您必须知道每个格式对应的类。似乎一个标准的ServiceLoader可以帮上忙?