如何在android中使用bouncycastle读取密码私钥?
我有一个用AES256和salam加密的私钥 我想解密它并读取其中的私钥 我写了以下代码:如何在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(
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,也可以找到另一个可以使用的加密库。我不知道这是什么意思!但我知道这是非常糟糕的!