Meine App verwendet den Schlüsselspeicher von Android, um einige Daten nach der Authentifizierung mit einem Fingerabdruck zu verschlüsseln. Nutzer von Google Pixel-Geräte die folgende Ausnahme berichten geworfen:InvalidKeyException auf Google PIxel-Geräten
java.security.InvalidKeyException: Es wird nur SecretKey unterstützt
Mein Code für die Verschlüsselung im Grunde das bedeutet:
_keystore.Load(null);
_keyGen.Init(new KeyGenParameterSpec.Builder(_keyId,
KeyStorePurpose.Encrypt | KeyStorePurpose.Decrypt)
.SetBlockModes(KeyProperties.BlockModeCbc)
// Require the user to authenticate with a fingerprint to authorize every use
// of the key
.SetUserAuthenticationRequired(true)
.SetEncryptionPaddings(KeyProperties.EncryptionPaddingPkcs7)
.Build());
_keyGen.GenerateKey();
Cipher _cipher = Cipher.GetInstance(KeyProperties.KeyAlgorithmAes + "/"
+ KeyProperties.BlockModeCbc + "/"
+ KeyProperties.EncryptionPaddingPkcs7);
KeyStore _keystore = KeyStore.GetInstance("AndroidKeyStore");
FingerprintManager _fingerprintManager = (FingerprintManager) Context.GetSystemService(Context.FingerprintService);
_keystore.Load(null);
var key = _keystore.GetKey(_keyId, null);
_cipher.Init(CipherMode.EncryptMode, key);
_cryptoObject = new FingerprintManager.CryptoObject(_cipher);
_fingerprintManager.Authenticate(_cryptoObject, _cancellationSignal, 0 /* flags */, this, null);
//OnAuthSucceeded:
var mySecret = _cipher.DoFinal(System.Text.Encoding.UTF8.GetBytes(textToEncrypt));
Es ist wie GetKey scheint gibt null zurück. Unterstützen diese neuen Geräte nur die asymmetrische Verschlüsselung? Bedeutet das, dass ich ein Schlüsselpaar generieren muss oder gibt es eine andere Lösung?
helfen Wie haben Sie '_keyId' erzeugt? Es muss zuvor in KeyStore generiert werden. Android Keystore unterstützt symmetrische und asymmetrische Schlüssel https://developer.android.com/training/articles/keystore.html – pedrofb
Bitte klären: welche Art von Android-Code ist das 'System.Text.Encoding.UTF8.GetBytes (textToEncrypt)'? – pedrofb
@pedrofb Ich habe den Code für die Schlüsselgenerierung hinzugefügt. Der Code ist in Mono für Android. Der Code, den Sie angeben, gibt einfach einige Bytes zurück, die ich verschlüsseln möchte. – Philipp