我读到 KeyChain.getPrivateKey(Context,String) 方法在 Android 4.1 上存在问题,尽管在旧版本上它可以工作。有人有解决方案如何在 JellyBean 上获取私钥吗?
看到这个Using Android 4.1 Keychain , 但不知何故无法处理我的案例。
代码不适用于 4.1,但在旧版本上运行良好。
PrivateKey pk;
try {
pk = KeyChain.getPrivateKey(context,string);
byte[] pkByte = pk.getEncoded();
pkBase64 = new String(Base64.encode(pkByte, Base64.NO_WRAP));
}
已编辑:发现如果我在添加时不更改证书别名(默认的十六进制-十六进制-十六进制),则 getPrivateKey 返回 null,但是当我将别名更改为,例如,aaa 方法返回一些东西,但仍然没有正确的私钥。 (例如,返回私钥 primeP =null primeQ =null。在 Android 4.0.4 上 primeP 和 primeQ 不是空值)
最佳答案
您不能假设 PrivateKey
可以被编码。如果 PrivateKey
为 getEncoded()
返回 null
,那么它只是不支持编码。查看documentation for Key.getEncoded() .
在 JellyBean 中,通过 KeyChain
返回的私钥永远不会在进程中。对它们执行的任何操作实际上都是在另一个进程中完成的,因为实际的关键问题可能存储在某种硬件安全模块中。您仍然可以调用 java.security.Signature
具有此 key 的 API。
关于android - Android 4.1 上的 KeyChain.getPrivateKey(Context,String)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12507697/