Hintergrund
Auf einer der Apps, an denen ich arbeite, speichere ich wichtige Dinge (Token) in verschlüsseltes Verschlüsselungspfeferen (stammen aus hier und hier ):
/** a hardware-encrypted based shared preference (for the values).
* Note that it is a bit slow, so it's better to always use it in a background thread.
* Also, avoid having it being backed-up in the manifest, as it's hardware based and will become useless: https://stackoverflow.com/a/63795282/878126*/
object SecuredSharedPreferences {
private var cachedDefaultSharedPreferences: SharedPreferences? = null
/**warning: using this function can take some time (249 ms on Pixel 4, for example). Very recommended to avoid calling it on UI thread */
@WorkerThread
fun getDefaultSecuredSharedPreferences(context: Context): SharedPreferences {
if (cachedDefaultSharedPreferences != null)
return cachedDefaultSharedPreferences!!
synchronized(this) {
if (cachedDefaultSharedPreferences != null)
return cachedDefaultSharedPreferences!!
cachedDefaultSharedPreferences = getSecuredSharedPreferences(context, context.packageName + "_secured_preferences")
}
return cachedDefaultSharedPreferences!!
}
@WorkerThread
private fun getSecuredSharedPreferences(context: Context, fileName: String): SharedPreferences {
val masterKey = MasterKey.Builder(context, MasterKey.DEFAULT_MASTER_KEY_ALIAS).setKeyScheme(MasterKey.KeyScheme.AES256_GCM).build()
return EncryptedSharedPreferences.create(context, fileName, masterKey,
EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM
)
}
}
< /code>
Gradle: < /p>
implementation 'androidx.security:security-crypto:1.1.0-alpha03'
Das Problem
Ich habe festgestellt, dass 2 Fehler über Crasclytics bei Verwendung dieses Codes gemeldet werden (angegeben hier ):
Erstens ist der MasterKey.builder code>
Fatal Exception: com.google.crypto.tink.shaded.protobuf.InvalidProtocolBufferException: Protocol message contained an invalid tag (zero).
at com.google.crypto.tink.shaded.protobuf.GeneratedMessageLite.parsePartialFrom(GeneratedMessageLite.java:1566)
at com.google.crypto.tink.shaded.protobuf.GeneratedMessageLite.parseFrom(GeneratedMessageLite.java:1663)
at com.google.crypto.tink.proto.Keyset.parseFrom(Keyset.java:957)
at com.google.crypto.tink.integration.android.SharedPrefKeysetReader.read(SharedPrefKeysetReader.java:84)
at com.google.crypto.tink.CleartextKeysetHandle.read(CleartextKeysetHandle.java:58)
at com.google.crypto.tink.integration.android.AndroidKeysetManager$Builder.read(AndroidKeysetManager.java:328)
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:160)
at androidx.security.crypto.EncryptedSharedPreferences.create(EncryptedSharedPreferences.java:120)
< /code>
nullPointerexception: < /li>
< /ol>
Fatal Exception: java.lang.NullPointerException: Attempt to invoke interface method 'android.security.keymaster.OperationResult android.security.IKeystoreService.begin(android.os.IBinder, java.lang.String, int, boolean, android.security.keymaster.KeymasterArguments, byte[], int)' on a null object reference
at android.security.KeyStore.begin(KeyStore.java:501)
at android.security.keystore.AndroidKeyStoreCipherSpiBase.ensureKeystoreOperationInitialized(AndroidKeyStoreCipherSpiBase.java:248)
at android.security.keystore.AndroidKeyStoreCipherSpiBase.engineInit(AndroidKeyStoreCipherSpiBase.java:109)
at javax.crypto.Cipher.tryTransformWithProvider(Cipher.java:2977)
at javax.crypto.Cipher.tryCombinations(Cipher.java:2884)
at javax.crypto.Cipher$SpiAndProviderUpdater.updateAndGetSpiAndProvider(Cipher.java:2789)
at javax.crypto.Cipher.chooseProvider(Cipher.java:956)
at javax.crypto.Cipher.init(Cipher.java:1199)
at javax.crypto.Cipher.init(Cipher.java:1143)
at com.google.crypto.tink.integration.android.AndroidKeystoreAesGcm.encryptInternal(AndroidKeystoreAesGcm.java:84)
at com.google.crypto.tink.integration.android.AndroidKeystoreAesGcm.encrypt(AndroidKeystoreAesGcm.java:72)
at com.google.crypto.tink.integration.android.AndroidKeystoreKmsClient.validateAead(AndroidKeystoreKmsClient.java:248)
at com.google.crypto.tink.integration.android.AndroidKeystoreKmsClient.getAead(AndroidKeystoreKmsClient.java:165)
at com.google.crypto.tink.integration.android.AndroidKeysetManager$Builder.readOrGenerateNewMasterKey(AndroidKeysetManager.java:267)
at com.google.crypto.tink.integration.android.AndroidKeysetManager$Builder.build(AndroidKeysetManager.java:236)
at androidx.security.crypto.EncryptedSharedPreferences.create(EncryptedSharedPreferences.java:155)
at androidx.security.crypto.EncryptedSharedPreferences.create(EncryptedSharedPreferences.java:120)
< /code>
Was ich ausprobiert habe < /H2>
Durch die Suche im Internet habe ich nur Hinweise auf die erste Ausnahme gefunden (GeneralSecurityException), dass es möglicherweise sein könnte, dass es für benutzerdefinierte ROMs vorkommt, da sie möglicherweise nicht gut die Hardware -Keys für Enkryption implementieren. Dass sie über die neueste Version stehen, die für sie unterstützt wurde. Ich denke, es könnte mit der Wiederherstellung von Apps zusammenhängen, aber es ist seltsam, da es ziemlich oft vorkommt. Auf Reddit (hier) schrieb jemand, dass er in einer solchen Ausnahme die Initialisierung von verschlüsselten Schatten mit "alle Daten löschen" entschlossen habe, wenn er fehlschlägt und die Kugel [/code] beißen. Schlug auch vor, dass es mit Android zusammenhängen könnte: Ermöglichen Sie backup deaktiviert sein (und in der Tat ist es).
Keine Ahnung des Restes. Was kann ich gegen sie tun? Ich bin mir nicht einmal sicher, ob es wirklich hilfreich ist, denn wenn ich es habe, bedeutet dies, dass der Crash -Bericht jedes Mal verschwunden ist, wenn er passieren wird ...
Ist es mit Android in Verbindung gebracht: erlaubenBackup deaktiviert sein?
Hintergrund Auf einer der Apps, an denen ich arbeite, speichere ich wichtige Dinge (Token) in verschlüsseltes Verschlüsselungspfeferen (stammen aus [b] hier [/b] und [b] hier [/b]): [code]/** a hardware-encrypted based shared preference (for the values). * Note that it is a bit slow, so it's better to always use it in a background thread. * Also, avoid having it being backed-up in the manifest, as it's hardware based and will become useless: https://stackoverflow.com/a/63795282/878126*/ object SecuredSharedPreferences { private var cachedDefaultSharedPreferences: SharedPreferences? = null
/**warning: using this function can take some time (249 ms on Pixel 4, for example). Very recommended to avoid calling it on UI thread */ @WorkerThread fun getDefaultSecuredSharedPreferences(context: Context): SharedPreferences { if (cachedDefaultSharedPreferences != null) return cachedDefaultSharedPreferences!! synchronized(this) { if (cachedDefaultSharedPreferences != null) return cachedDefaultSharedPreferences!! cachedDefaultSharedPreferences = getSecuredSharedPreferences(context, context.packageName + "_secured_preferences") } return cachedDefaultSharedPreferences!! }
@WorkerThread private fun getSecuredSharedPreferences(context: Context, fileName: String): SharedPreferences { val masterKey = MasterKey.Builder(context, MasterKey.DEFAULT_MASTER_KEY_ALIAS).setKeyScheme(MasterKey.KeyScheme.AES256_GCM).build() return EncryptedSharedPreferences.create(context, fileName, masterKey, EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV, EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM ) } } < /code> Gradle: < /p> implementation 'androidx.security:security-crypto:1.1.0-alpha03' [/code] Das Problem Ich habe festgestellt, dass 2 Fehler über Crasclytics bei Verwendung dieses Codes gemeldet werden (angegeben [b] hier [/b]): [list] [*] Erstens ist der MasterKey.builder code> Fatal Exception: com.google.crypto.tink.shaded.protobuf.InvalidProtocolBufferException: Protocol message contained an invalid tag (zero). at com.google.crypto.tink.shaded.protobuf.GeneratedMessageLite.parsePartialFrom(GeneratedMessageLite.java:1566) at com.google.crypto.tink.shaded.protobuf.GeneratedMessageLite.parseFrom(GeneratedMessageLite.java:1663) at com.google.crypto.tink.proto.Keyset.parseFrom(Keyset.java:957) at com.google.crypto.tink.integration.android.SharedPrefKeysetReader.read(SharedPrefKeysetReader.java:84) at com.google.crypto.tink.CleartextKeysetHandle.read(CleartextKeysetHandle.java:58) at com.google.crypto.tink.integration.android.AndroidKeysetManager$Builder.read(AndroidKeysetManager.java:328) 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:160) at androidx.security.crypto.EncryptedSharedPreferences.create(EncryptedSharedPreferences.java:120) < /code>
nullPointerexception: < /li> < /ol> Fatal Exception: java.lang.NullPointerException: Attempt to invoke interface method 'android.security.keymaster.OperationResult android.security.IKeystoreService.begin(android.os.IBinder, java.lang.String, int, boolean, android.security.keymaster.KeymasterArguments, byte[], int)' on a null object reference at android.security.KeyStore.begin(KeyStore.java:501) at android.security.keystore.AndroidKeyStoreCipherSpiBase.ensureKeystoreOperationInitialized(AndroidKeyStoreCipherSpiBase.java:248) at android.security.keystore.AndroidKeyStoreCipherSpiBase.engineInit(AndroidKeyStoreCipherSpiBase.java:109) at javax.crypto.Cipher.tryTransformWithProvider(Cipher.java:2977) at javax.crypto.Cipher.tryCombinations(Cipher.java:2884) at javax.crypto.Cipher$SpiAndProviderUpdater.updateAndGetSpiAndProvider(Cipher.java:2789) at javax.crypto.Cipher.chooseProvider(Cipher.java:956) at javax.crypto.Cipher.init(Cipher.java:1199) at javax.crypto.Cipher.init(Cipher.java:1143) at com.google.crypto.tink.integration.android.AndroidKeystoreAesGcm.encryptInternal(AndroidKeystoreAesGcm.java:84) at com.google.crypto.tink.integration.android.AndroidKeystoreAesGcm.encrypt(AndroidKeystoreAesGcm.java:72) at com.google.crypto.tink.integration.android.AndroidKeystoreKmsClient.validateAead(AndroidKeystoreKmsClient.java:248) at com.google.crypto.tink.integration.android.AndroidKeystoreKmsClient.getAead(AndroidKeystoreKmsClient.java:165) at com.google.crypto.tink.integration.android.AndroidKeysetManager$Builder.readOrGenerateNewMasterKey(AndroidKeysetManager.java:267) at com.google.crypto.tink.integration.android.AndroidKeysetManager$Builder.build(AndroidKeysetManager.java:236) at androidx.security.crypto.EncryptedSharedPreferences.create(EncryptedSharedPreferences.java:155) at androidx.security.crypto.EncryptedSharedPreferences.create(EncryptedSharedPreferences.java:120) < /code> Was ich ausprobiert habe < /H2> Durch die Suche im Internet habe ich nur Hinweise auf die erste Ausnahme gefunden (GeneralSecurityException), dass es möglicherweise sein könnte, dass es für benutzerdefinierte ROMs vorkommt, da sie möglicherweise nicht gut die Hardware -Keys für Enkryption implementieren. Dass sie über die neueste Version stehen, die für sie unterstützt wurde. Ich denke, es könnte mit der Wiederherstellung von Apps zusammenhängen, aber es ist seltsam, da es ziemlich oft vorkommt. Auf Reddit (hier) schrieb jemand, dass er in einer solchen Ausnahme die Initialisierung von verschlüsselten Schatten mit "alle Daten löschen" entschlossen habe, wenn er fehlschlägt und die Kugel [/code] beißen. Schlug auch vor, dass es mit Android zusammenhängen könnte: [url=viewtopic.php?t=12298]Ermöglichen[/url] Sie backup deaktiviert sein (und in der Tat ist es). Keine Ahnung des Restes. Was kann ich gegen sie tun? Ich bin mir nicht einmal sicher, ob es wirklich hilfreich ist, denn wenn ich es habe, bedeutet dies, dass der Crash -Bericht jedes Mal verschwunden ist, wenn er passieren wird ... Ist es mit Android in Verbindung gebracht: erlaubenBackup deaktiviert sein?
Ich verwende Spring Boot mit JPA in meinem Projekt. Ich habe eine Serviceklasse, die eine Repository-Methode aufruft, die Page
zurückgibt@Query( SOME QUERY )
Page findAllValues(@Param( itemNo )...
Ich bin neu in der Full-Stack-Anwendung. Ich habe angle11 im Front-End und ein Spring-Boot-Gradle-Projekt mit JPA-Rest-Service im Back-End verwendet.
Meine Angular-Methode
addTodos(todo:Todos)
{...
Ich habe gerade meine aktuelle Android-Anwendung aktualisiert, um Java 11 und die Build-Tools 32.0.0 zu verwenden.
Hier sind die Details zu Android Studio, die ich verwende
Android Studio Bumblebee...
Ich weiß bereits, dass 'Tunnel to' durch Zertifikatberechtigungen verursacht wird, aber ich muss dieses Problem nicht vollständig lösen. Das Problem ist, dass Anfragen mit 'Tunnel zu' Daten nicht...