Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/224.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android保存RSA私钥和公钥_Java_Android_Rsa_Android Keystore - Fatal编程技术网

Java Android保存RSA私钥和公钥

Java Android保存RSA私钥和公钥,java,android,rsa,android-keystore,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[] publicKeyByte

我需要保存我的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上,这将显示:

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

你知道这个代码有什么问题吗


感谢您的帮助。

尝试使用
PKCS8EncodedKeySpec
作为私钥

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


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

您尝试将密钥编码为Base64并像字符串一样存储,当您检索时只需要将密钥从Base64解码为字节数组。

虽然我还没有验证过,但我相信
X509EncodedKeySpec
的公钥是正确的。谢谢jHilscher,它不起作用!-是的,GregS我现在使用X509EncodedKeySpec作为公钥,PKCS8EncodedKeySpec作为私钥。您能否提供RSAPublicKeySpec的初始化代码。在网上查找有困难吗