Android保存RSA私钥和公钥

时间:2015-02-03 19:06:37

标签: java android rsa android-keystore

我需要保存我的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();

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

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

这不起作用:

    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

这段代码有什么问题吗?

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

尝试使用PKCS8EncodedKeySpec作为私钥。

RSAPublicKeySpec代表公钥,而不是X509EncodedKeySpec

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

答案 1 :(得分:-2)

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