gpt4 book ai didi

java - 在 EncryptedSharedPreferences 中需要使用什么 key 别名?

转载 作者:行者123 更新时间:2023-12-04 23:40:03 38 4
gpt4 key购买 nike

enter image description here
如何在 Encrypted sharedpreferences 中使用 key 别名?
以下是我的加密共享偏好

KeyGenParameterSpec spec = new KeyGenParameterSpec.Builder(
DEFAULT_MASTER_KEY_ALIAS,
KeyProperties.PURPOSE_ENCRYPT | KeyProperties.PURPOSE_DECRYPT)
.setBlockModes(KeyProperties.BLOCK_MODE_GCM)
.setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_NONE)
.setKeySize(DEFAULT_AES_GCM_MASTER_KEY_SIZE)
.build();

MasterKey masterKey = new MasterKey.Builder(this)
.setKeyGenParameterSpec(spec)
.build();

SharedPreferences sharedPreferences = EncryptedSharedPreferences.create(this,
this.getResources().getString(R.string.app_preferences),
masterKey,
EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM
);
执行此操作时出现以下异常,
 W/AndroidKeysetManager: keyset not found, will generate a new one
java.io.FileNotFoundException: can't read keyset; the pref value __androidx_security_crypto_encrypted_prefs_key_keyset__ does not exist
at com.google.crypto.tink.integration.android.SharedPrefKeysetReader.readPref(SharedPrefKeysetReader.java:71)
at com.google.crypto.tink.integration.android.SharedPrefKeysetReader.readEncrypted(SharedPrefKeysetReader.java:89)
at com.google.crypto.tink.KeysetHandle.read(KeysetHandle.java:105)
at com.google.crypto.tink.integration.android.AndroidKeysetManager$Builder.read(AndroidKeysetManager.java:311)
at com.google.crypto.tink.integration.android.AndroidKeysetManager$Builder.readOrGenerateNewKeyset(AndroidKeysetManager.java:287)
at com.google.crypto.tink.integration.android.AndroidKeysetManager$Builder.build(AndroidKeysetManager.java:238)
at androidx.security.crypto.EncryptedSharedPreferences.create(EncryptedSharedPreferences.java:155)
at androidx.security.crypto.EncryptedSharedPreferences.create(EncryptedSharedPreferences.java:120)
我需要更换 DEFAULT_MASTER_KEY_ALIAS那个框中提到的关键别名?
如果是,那么我怎么能在没有硬编码的情况下做到这一点?
我已更换 DEFAULT_MASTER_KEY_ALIAS具有模块下的项目结构中提到的关键别名。得到以下异常。
java.lang.IllegalArgumentException: KeyGenParamSpec's key alias does not match provided alias (_androidx_security_master_key_ vs mykeyalias

最佳答案

您的问题来自这一行:

MasterKey masterKey = new MasterKey.Builder(this)
根据 MasterKey.Builder()执行,如果您不提供作为 key 别名的第二个参数
 public Builder(@NonNull Context context, @NonNull String keyAlias) {
mContext = context.getApplicationContext();
mKeyAlias = keyAlias;
}
然后使用默认的 key 别名
public Builder(@NonNull Context context) {
this(context, MasterKey.DEFAULT_MASTER_KEY_ALIAS);
}
因此,一旦您尝试使用 构建KeyGenParameterSpec 使用不同的别名,它在提示。使用带有键别名作为第二个参数的构造函数,那么它应该可以工作。
抱歉回复晚了,我也遇到了同样的问题。在寻找答案的同时,我更愿意分享这个来帮助其他人。

关于java - 在 EncryptedSharedPreferences 中需要使用什么 key 别名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66760328/

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