java - (Android/Java)创建RSA私钥实例

标签 java android encryption rsa private-key

我正在尝试从 pem 文件在 Android 应用程序中创建一个 PrivateKey 实例来解密一些数据,但我收到以下错误:

java.lang.RuntimeException: error:0c0890ba:ASN.1 encoding routines:asn1_check_tlen:WRONG_TAG

代码:

// Read private key.
InputStream is = context.getResources().openRawResource(R.raw.private_key);
br = new BufferedReader(new InputStreamReader(is));
List<String> lines = new ArrayList<String>();
line = null;
while ((line = br.readLine()) != null)
    lines.add(line);

// Removes the first and last lines of the file (comments).
if (lines.size() > 1 && lines.get(0).startsWith("-----") &&
        lines.get(lines.size()-1).startsWith("-----")) {
    lines.remove(0);
    lines.remove(lines.size()-1);
}

// Concats the remaining lines to a single String.
StringBuilder sb = new StringBuilder();
for (String aLine: lines)
    sb.append(aLine);
String keyString = sb.toString();

// Converts the String to a PublicKey instance
byte[] keyBytes = Base64.decode(keyString, Base64.DEFAULT);
PKCS8EncodedKeySpec spec = new PKCS8EncodedKeySpec(keyBytes);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
mKey = keyFactory.generatePrivate(spec);

有什么帮助吗?

最佳答案

您的 key 似乎不是 PKCS8 格式。 Java 不支持加载 PKCS#1 格式的 key 。检查您的 key 是否为 PKCS#8 格式,验证它是否以 -----BEGIN PRIVATE KEY----- 开头 如果它以 ----BEGIN RSA PRIVATE KEY- 开头---- 那么您需要将其转换为 PKCS#8。参见 Convert PEM traditional private key to PKCS8 private key

关于java - (Android/Java)创建RSA私钥实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42202978/

相关文章:

java - 在 Android studio : Kotlin 中保存实例状态

java - 显示依赖于区域设置的货币符号的最佳方式是什么?

java - 在屏幕的一部分的 Canvas 上绘图

java - 使用 java.io.RandomAccessFile,如何编写文件并不断在开头添加内容?

c++ - 程序如何验证加密文件的密码?

java - 不同提供商的加密和解密

java - GWT Autobean Bean 为空

java - 在 Ubuntu 上通过 PulseAudio 从 Java 播放音频文件时出错

java - spring 自定义注销过滤器在注销之前执行某些操作?

java - 密码管理