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 - I/Choreographer(12759) : Skipped 40 frames! 应用程序可能在其主线程上做了太多工作

node.js - 服务如何生成和使用公共(public)和 secret API key ?

ios - 如何恢复消耗品In App Purchases?

android - 如何将带双引号的 HTML 数据添加到 Java 中的字符串?

java - Android Sqlite 操作

Android自定义设备相机权限

security - 用户登录安全 - 本地 cookie 与 session

java - 如何捕获 LTPA WebSphere 异常

xcode - 使用 Objective-C 的 SFSafariViewController

macos - SecKeychain API 是否支持 iCloud 钥匙串(keychain)同步?