android - Android 4.1 上的 KeyChain.getPrivateKey(Context,String)?

标签 android security keychain private-key android-4.2-jelly-bean

我读到 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 可以被编码。如果 PrivateKeygetEncoded() 返回 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/

相关文章:

java - 根据滑动方向更改 View 颜色

java - 使用 Eclipse 导出 jar 不保存更改?

android - 当应用程序崩溃时,共享首选项会重置数据。请指导

java - notnoop java-apns 抛出 javax.net.ssl.SSLHandshakeException :Received fatal alert: handshake_failure

c - 如何在PAM应用程序中捕获密码

xss - 什么是跨站脚本包含 (XSSI)?

ios - 应用程序内的钥匙串(keychain)解锁,这种方法安全吗?

ios - 在 iOS 上查找证书

macos - 钥匙串(keychain)服务 安全笔记

android - 从 Assets 文件夹错误读取sqlite