Android KeyStoreException:

时间:2016-04-18 20:27:00

标签: android encryption android-fingerprint-api

我的应用使用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));

代码有什么问题吗?这个例外意味着什么?

1 个答案:

答案 0 :(得分:2)

首先,您的代码看起来很好。

根据我的经验,Android指纹往往会在各种设备上出现很多奇怪的边缘情况错误。我无法准确回答,但这听起来像是硬件或实现问题,FP api on oneplus' s部分。我知道小米甚至谷歌已经承认了他们实施的各种奇怪问题。

提示:

确保您只收听指纹一次。如果你听两次,你可以收到不正确的密码对象,因此加密不匹配。

更新你的gradle / min sdk / support库,所有这些东西

坚持你的屁股