Android保存RSA私钥和公钥

我需要保存我的RSA私钥和公钥。 我在这里创造它。

KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA"); kpg.initialize(1024); KeyPair kp = kpg.genKeyPair(); publicKey = kp.getPublic(); privateKey = kp.getPrivate(); 

现在我想下次使用这两个键。 所以它们应该存储在设备上。

  byte[] publicKeyBytes = publicKey.getEncoded(); byte[] privateKeyBytes = privateKey.getEncoded(); 

所以我可以获得字节数组,然后将它们保存为文本文件。 然后下次我读它并将其转换回字节数组。

现在我的问题:如何将字节数组转换回键?

这不起作用:

  KeyFactory keyFactory = KeyFactory.getInstance("RSA"); X509EncodedKeySpec spec = new X509EncodedKeySpec(publicKeyBytes); publicKey = keyFactory.generatePublic(spec); spec = new X509EncodedKeySpec(privateKeyBytes); privateKey = keyFactory.generatePrivate(spec); 

在LogCat上,这将显示:

必须使用RSAPublicKeySpec或PKCS8EncodedKeySpec; 是java.security.spec.X509EncodedKeySpec

这个代码有什么问题吗?

谢谢你的帮助。

尝试使用PKCS8EncodedKeySpec作为私钥。

公钥的X509EncodedKeySpec ,而不是两者的X509EncodedKeySpec

另请注意,将密钥保存到文本文件可能不是最安全的想法。 Android提供了一个很好的KeyStore Api ,它易于使用。

您尝试在Base64中对密钥进行编码并像String一样存储,当您检索时只需要将密钥从Base64解码为Byte数组。