私のアプリは、Androidのキーストアを使用して指紋で認証した後、一部のデータを暗号化しています。 Googleのピクセルデバイスのユーザーがスローされ、次の例外を報告している:Google PIxelデバイスのInvalidKeyException
java.security.InvalidKeyException:のみのSecretKeyが
をサポートされている暗号化のための私のコードは、基本的にはこの行います
_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));
をそれのGetKeyように思えますnullを返します。これらの新しいデバイスは非対称暗号化しかサポートしていませんか?これは鍵ペアを生成する必要があることを意味するのでしょうか、それとも別の解決策がありますか?
どのように助けることができるかどうか私のこのコードを試してみてください? KeyStoreに事前に生成する必要があります。 Androidキーストアは対称キーと非対称キーをサポートしていますhttps://developer.android.com/training/articles/keystore.html – pedrofb
この「System.Text.Encoding.UTF8.GetBytes(textToEncrypt)」はどのようなアンドロイドコードですか? – pedrofb
@pedrofb鍵の生成に使用するコードを追加しました。コードはAndroidのMonoにあります。あなたが引用したコードは、暗号化したいいくつかのバイトを返すだけです。 – Philipp