Android 保存 RSA 私钥和 Public 密钥
Android Save RSA Private and Public Key
我需要保存我的 RSA 私钥和 public 密钥。我在这里创建它。
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,这将显示:
Must use RSAPublicKeySpec or PKCS8EncodedKeySpec; was
java.security.spec.X509EncodedKeySpec
知道这段代码有什么问题吗?
感谢您的帮助。
尝试使用 PKCS8EncodedKeySpec
作为私钥。
RSAPublicKeySpec
用于 public 键,而不是 X509EncodedKeySpec
用于两者。
另请注意,将密钥保存到文本文件中可能不是最安全的做法。 Android 提供了一个很好用的 KeyStore Api,它很容易使用。
您尝试将密钥编码为 Base64 并像字符串一样存储,当您检索时只需要将密钥从 Base64 解码为字节数组。
我需要保存我的 RSA 私钥和 public 密钥。我在这里创建它。
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,这将显示:
Must use RSAPublicKeySpec or PKCS8EncodedKeySpec; was java.security.spec.X509EncodedKeySpec
知道这段代码有什么问题吗?
感谢您的帮助。
尝试使用 PKCS8EncodedKeySpec
作为私钥。
RSAPublicKeySpec
用于 public 键,而不是 X509EncodedKeySpec
用于两者。
另请注意,将密钥保存到文本文件中可能不是最安全的做法。 Android 提供了一个很好用的 KeyStore Api,它很容易使用。
您尝试将密钥编码为 Base64 并像字符串一样存储,当您检索时只需要将密钥从 Base64 解码为字节数组。