toDerInputStream拒绝标记类型0 - 无法从密钥库中读取密钥

时间:2017-08-25 12:59:05

标签: java android keytool java-security

在我的Android应用中,我有一个名为keystore.p12的密钥库文件,位于/data/data/com.company.myapp/files。我拉了这个特定的文件,现在我想检索存储在其中的密钥。

我用这样的keytool尝试了它:

>keytool.exe -list -keystore C:\Users\user\Desktop\keystore.p12 -storepass letmein -storetype PKCS12 -v

不幸的是,我收到以下错误:

keytool error: java.io.IOException: toDerInputStream rejects tag type 0
java.io.IOException: toDerInputStream rejects tag type 0
        at sun.security.util.DerValue.toDerInputStream(DerValue.java:874)
        at sun.security.pkcs12.PKCS12KeyStore.engineLoad(PKCS12KeyStore.java:1915)
        at java.security.KeyStore.load(KeyStore.java:1445)
        at sun.security.tools.keytool.Main.doCommands(Main.java:795)
        at sun.security.tools.keytool.Main.run(Main.java:343)
        at sun.security.tools.keytool.Main.main(Main.java:336)

我尝试用Java做同样的事情,但我遇到了同样的例外:

public static void main(String[] args) {
        try {
            FileInputStream is = new FileInputStream("C:\\Users\\user\\Desktop\\keystore.p12");
            KeyStore keystore = KeyStore.getInstance("pkcs12");
            keystore.load(is, "letmein".toCharArray());
            is.close();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

知道如何解决这个问题吗?

1 个答案:

答案 0 :(得分:2)

看起来您的System::UserName文件不是PKCS#12文件,而是不同的密钥库类型。我会尝试使用Keystore Explorer打开它,尝试使用每个可用的密钥库类型(PKCS12,BKS,JKS,...)打开文件。

它可以加载你将在主寡妇底部的文件信息中看到的文件加载算法成功。