Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/189.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
如何在android中使用bouncycastle读取密码私钥?_Android_Certificate_Bouncycastle - Fatal编程技术网

如何在android中使用bouncycastle读取密码私钥?

如何在android中使用bouncycastle读取密码私钥?,android,certificate,bouncycastle,Android,Certificate,Bouncycastle,我有一个用AES256和salam加密的私钥 我想解密它并读取其中的私钥 我写了以下代码: public CertReader(String password, Context context) { mContext = context; pf = new Password(password.toCharArray()); InputStream Certin = mContext.getResources().openRawResource(

我有一个用AES256和salam加密的私钥

我想解密它并读取其中的私钥

我写了以下代码:

public CertReader(String password, Context context) {
        mContext = context;
        pf = new Password(password.toCharArray());
        InputStream Certin = mContext.getResources().openRawResource(
                R.raw.kxx_2048_sign);
        PEMReader pemRd = openPEMResource(Certin, pf);
        Object o = null;

        try {
            o = pemRd.readObject();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        X509Certificate x509 = ((X509Certificate) o);
        logging.l(x509.toString());

        Certin = mContext.getResources().openRawResource(
                R.raw.kxx_2048);
        pemRd = openPEMResource(Certin, pf);
        try {
            o = pemRd.readObject(); //My Program exit with error here.
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        // KeyPair key = ((KeyPair)o);
        // logging.l(key.toString());

    }

    private PEMReader openPEMResource(InputStream Certin, PasswordFinder pGet) {
        Reader fRd = new BufferedReader(new InputStreamReader(Certin));
        return new PEMReader(fRd, pGet);
    }

    private static class Password implements PasswordFinder {
        char[] password;

        Password(char[] word) {
            this.password = word;
        }

        public char[] getPassword() {
            return password;
        }
    }
kxx_2048_sign.crt
是一个证书,它没有问题,因为它不是加密的

但是
kxx_2048.key
是用
AES256
o=pemRd.readObject()加密的我得到以下错误:

 java.lang.IllegalAccessError: tried to access class org.bouncycastle.openssl.PEMUtilities from class org.bouncycastle.openssl.PEMReader$KeyPairParser
关键点从以下内容开始:

-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-256-CBC,5C76FCD87.....
有什么问题


我在PC上检查了它,它工作正常,但在Android上它不工作。

您好,这是一个不速之客,但您在创建新的PEMReader时是否尝试提供AES256作为提供商参数。如果您查看下面的代码,有一行
keyBytes=pemputilities.crypt(false,provider,keyBytes,password,devalgname,iv)默认情况下,如果您不提供任何提供程序,构造函数会将提供程序设置为“BC”。我的猜测是,由于参数的不匹配,行失败了,并且与错误有一定的关系。看看有没有什么变化。Cheeset似乎不合法,AccessError是一个bug。我搜索了谷歌,找到了一个答案:弹跳城堡军团是Android固件的一部分,但不是SDK的一部分。您无法可靠地添加自己的JAR实现。可以通过javax.crypto API使用Castle,也可以找到另一个可以使用的加密库。我不知道这是什么意思!但我知道这是非常糟糕的!