xamarin / Essentials

Xamarin.Essentials is no longer supported. Migrate your apps to .NET MAUI, which includes Maui.Essentials.
https://aka.ms/xamarin-upgrade
Other
1.53k stars 506 forks source link

[Bug] Android 5.0 - Secure storage Encryption key size Exception #1522

Open Vencode opened 3 years ago

Vencode commented 3 years ago

Description

Secure storage SetAsync throwing an exception when called on Android Api 21

Steps to Reproduce

  1. Call SecureStorage.SetAsync

Expected Behavior

Data is securely stored

Actual Behavior

Exception is throwned

Basic Information

Error

[0:] Java.Security.InvalidKeyException: Unsupported key size: 24 bytes (must be 16 or 32) at Java.Interop.JniEnvironment+InstanceMethods.CallNonvirtualVoidMethod (Java.Interop.JniObjectReference instance, Java.Interop.JniObjectReference type, Java.Interop.JniMethodInfo method, Java.Interop.JniArgumentValue args) [0x0008e] in <42748fcc36b74733af2d9940a8f3cc8e>:0 at Java.Interop.JniPeerMembers+JniInstanceMethods.InvokeNonvirtualVoidMethod (System.String encodedMember, Java.Interop.IJavaPeerable self, Java.Interop.JniArgumentValue parameters) [0x0001f] in <42748fcc36b74733af2d9940a8f3cc8e>:0 at Javax.Crypto.Cipher.Init (Javax.Crypto.CipherMode opmode, Java.Security.IKey key, Java.Security.Spec.IAlgorithmParameterSpec params) [0x00069] in /Users/builder/azdo/_work/287/s/xamarin-android/src/Mono.Android/obj/Release/monoandroid10/android-28/mcw/Javax.Crypto.Cipher.cs:508 at Xamarin.Essentials.AndroidKeyStore.Encrypt (System.String data) [0x00025] in d:\a\1\s\Xamarin.Essentials\SecureStorage\SecureStorage.android.cs:335 at Xamarin.Essentials.SecureStorage.PlatformSetAsync (System.String key, System.String data) [0x00029] in d:\a\1\s\Xamarin.Essentials\SecureStorage\SecureStorage.android.cs:85 at Xamarin.Essentials.SecureStorage.SetAsync (System.String key, System.String value) [0x00021] in d:\a\1\s\Xamarin.Essentials\SecureStorage\SecureStorage.shared.cs:27

kyluke commented 3 years ago

I'm experiencing the same issue on the same versions

kyluke commented 3 years ago
ProviderInstaller.InstallIfNeeded(this);

Was the cause of the issue on Android 5.1.1 for me. Maybe it helps you.