Si te encuentras con algún detalle que no comprendes puedes dejarlo en la sección de comentarios y te ayudaremos lo más rápido posible.
Solución:
prueba este
MasterKey masterKey = new MasterKey.Builder(context, MasterKey.DEFAULT_MASTER_KEY_ALIAS)
.setKeyScheme(MasterKey.KeyScheme.AES256_GCM)
.build();
SharedPreferences sharedPreferences = EncryptedSharedPreferences.create(
context,
SHARED_PREF_NAME,
masterKey,
EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM);
Hoy tuve exactamente el mismo problema. Vea a continuación la solución/solución alternativa (el ejemplo está en el código Java, pero puede hacer lo mismo fácilmente en Kotlin)
-
Use MasterKey.Builder para crear MasterKey (en lugar de MasterKeys). Constrúyalo con KeyGenParameterSpec creado “manualmente”:
// this is equivalent to using deprecated MasterKeys.AES256_GCM_SPEC KeyGenParameterSpec spec = new KeyGenParameterSpec.Builder( MASTER_KEY_ALIAS, KeyProperties.PURPOSE_ENCRYPT | KeyProperties.PURPOSE_DECRYPT) .setBlockModes(KeyProperties.BLOCK_MODE_GCM) .setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_NONE) .setKeySize(KEY_SIZE) .build(); MasterKey masterKey = new MasterKey.Builder(MainActivity.this) .setKeyGenParameterSpec(spec) .build();
-
Cree EncryptedSharedPreferences usando una versión ligeramente diferente del método “crear”:
EncryptedSharedPreferences.create( MainActivity.this, "your-app-preferences-name", masterKey, // masterKey created above EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV, EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM);
Eso debería hacer el truco 🙂
Referencia y más detalles: https://devmainapps.blogspot.com/2020/06/android-masterkeys-deprecated-how-to.html
puedes usar cualquiera de las dos formas
KeyGenParameterSpec spec = new KeyGenParameterSpec.Builder(
MASTER_KEY_ALIAS,
KeyProperties.PURPOSE_ENCRYPT | KeyProperties.PURPOSE_DECRYPT)
.setBlockModes(KeyProperties.BLOCK_MODE_GCM)
.setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_NONE)
.setKeySize(KEY_SIZE)
.build();
MasterKey masterKey = new MasterKey.Builder(MainActivity.this)
.setKeyGenParameterSpec(spec)
.build();
o
MasterKey masterKey = new
MasterKey.Builder(context,MasterKey.DEFAULT_MASTER_KEY_ALIAS).
setKeyScheme(MasterKey.KeyScheme.AES256_GCM).build();
MasterKey.KeyScheme.AES256_GCM usa internamente lo mismo key generarspec como se indicó anteriormente.
Nos puedes añadir valor a nuestro contenido informacional añadiendo tu veteranía en las explicaciones.