我的应用使用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)
我的代码基本上是这样的(用Mono for Android编写):
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));
代码有什么问题吗?这个例外意味着什么?
答案 0 :(得分:2)
首先,您的代码看起来很好。
根据我的经验,Android指纹往往会在各种设备上出现很多奇怪的边缘情况错误。我无法准确回答,但这听起来像是硬件或实现问题,FP api on oneplus' s部分。我知道小米甚至谷歌已经承认了他们实施的各种奇怪问题。
提示:
确保您只收听指纹一次。如果你听两次,你可以收到不正确的密码对象,因此加密不匹配。
更新你的gradle / min sdk / support库,所有这些东西
坚持你的屁股