gpt4 book ai didi

AndroidKeyStore 在设备密码更改后消失

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:59:58 25 4
gpt4 key购买 nike

我目前正在开发基于客户端-服务器架构的 android 应用程序。为了数据安全,我使用公私 key 对进行数据加密和签名。我正在使用 AndroidKeyStore 来存储 key 对。下面是生成 key 对的代码:

KeyPairGeneratorSpec spec = new KeyPairGeneratorSpec.Builder(
mContext)
.setAlias(mPrivateKeyAlias)
.setSubject(new X500Principal("CN=" + mPrivateKeyAlias))
.setSerialNumber(
BigInteger.valueOf(System.currentTimeMillis()))
.setStartDate(start.getTime())
.setEndDate(end.getTime()).setKeySize(2048).build();

KeyPairGenerator kpGenerator = KeyPairGenerator.getInstance(
"RSA",
"AndroidKeyStore");

kpGenerator.initialize(spec);
// Key Pair will be saved in AndroidKeyStore
KeyPair pair = kpGenerator.generateKeyPair();

执行此代码后,将在“/data/misc/keystore/user_0/”目录中生成 Keystore 相关文件(CERT 和 PKEY 文件)。出于安全原因,我正在加密应用程序敏感数据(例如 auth-token)并将其保存到 Shared Pref。

但现在当用户更改设备密码或 PIN 码时, keystore 文件将被删除,因为用于 keystore 加密的主 key 是使用设备凭据生成的。

现在要解决此问题,我尝试将公私 key 对保存在 RAM 中以及更改密码时。从 DeviceAdminReceiver 的 onPasswordChanged(Context context, Intent intent) 方法,我正在执行以下代码:

KeyStore keyStore = KeyStore
.getInstance("AndroidKeyStore");
keyStore.load(null);
keyStore.setKeyEntry(mPrivateKeyAlias, mPrivateKey.getPrivateKey(),
null, new Certificate[] { mPrivateKey.getCertificate() });

但是,在这段代码之后,只有 CERT 文件被创建在 '/data/misc/keystore/user_0/' 目录中,并且在使用私钥解密时,给出了一些无效的签名错误。

此外,我已与服务器共享我的公钥,并使用私钥加密数据,因此创建新的 key 对不是更好的解决方案。

那么,如何在设备密码更改后保留我的公钥对?如果没有解决方法,AndroidKeyStore 的确切用途是什么?我可以在哪里使用它?

最佳答案

此问题已由 Google 在 Android 5.0 (Lollipop) 版本中修复。但是,对于以前版本的 Android,您将不得不忍受这个问题。 :(

关于AndroidKeyStore 在设备密码更改后消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25968001/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com