2

我读到 Android 4.1 上的方法 KeyChain.getPrivateKey(Context,String) 存在问题,尽管在旧版本上它可以工作。有人有解决方案如何在 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 不是空值)

4

1 回答 1

1

你不能假设 aPrivateKey可以被编码。如果 aPrivateKey返回nullfor getEncoded(),那么它只是不支持编码。请参阅Key.getEncoded() 的文档

在 JellyBean 中,通过返回的私钥KeyChain永远不会在进程中。对它们执行的任何操作实际上都是在另一个进程中完成的,因为实际的关键问题可能存储在某种硬件安全模块中。您仍然可以java.security.Signature使用此密钥调用 API。

于 2012-09-21T23:28:19.350 回答