我的应用程序在使用指纹进行身份验证后,使用Android的密钥库加密一些数据。这似乎适用于大多数设备,但我收到了OnePlus2用户的错误报告,除外
android.security.KeyStoreException: Signature/MAC verification failed
at android.security.KeyStore.getKeyStoreException(KeyStore.java:632)
at android.security.keystore.KeyStoreCryptoOperationChunkedStreamer.update(KeyStoreCryptoOperationChunkedStreamer.java:132)
at android.security.keystore.KeyStoreCryptoOperationChunkedStreamer.doFinal(KeyStoreCryptoOperationChunkedStreamer.java:217)
at android.security.keystore.AndroidKeyStoreCipherSpiBase.engineDoFinal(AndroidKeyStoreCipherSpiBase.java:473)
at javax.crypto.Cipher.doFinal(Cipher.java:1502)
我的代码基本上做到了这一点(用Android的Mono编写):
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));
代码有什么问题吗?例外是什么意思?
首先,您的代码看起来不错。
根据我的经验,Android指纹在各种设备上往往会出现很多奇怪的边缘错误。。我不能准确回答,但这听起来像是oneplus方面FP-api的硬件或实现问题。我知道小米,甚至谷歌都承认它们的实现存在各种奇怪的问题。
提示:
确保你只听一次指纹。如果你听两次,你可能会收到不正确的加密对象,所以加密不会匹配。
更新你的gradle/min-sdk/support库,所有这些
抓住你的屁股