Android KeyStoreException:

18

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

代码有什么问题吗?异常信息是什么意思?


你是用keytool制作自签名证书还是使用调试证书?听起来好像不喜欢Mac地址。 - Pomagranite
@user3535611 MAC代表消息认证码,而不是媒体访问控制。 - Maarten Bodewes
密钥库的身份验证标签失败了。看起来正在进行流式传输,所以这可能是一个未经身份验证的密码,无法通过验证。这很可能意味着在指纹验证后提供了错误的密钥。但我不知道为什么会发生这种情况。 - Maarten Bodewes
认证问题?清单权限? - Pomagranite
@Philipp,你解决问题的方案了吗? - Bala Saikrupa Puram
@Philipp,你是怎么解决这个问题的? - Hermann Klecker
1个回答

2

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

根据我的经验,在各种设备上,Android指纹识别往往会出现很多奇怪的边缘情况错误。我无法确切回答,但听起来似乎是一加公司在FP api方面的硬件或实现问题。我知道小米甚至谷歌已经承认了他们的实现中存在各种奇怪的问题。

提示:

确保您仅监听一次指纹。如果您监听两次,则可能会收到不正确的密码对象,因此加密将不匹配。

更新您的gradle/min sdk/support库等所有内容。

抓紧你的屁股。


1
那个侏罗纪公园的参考真是太棒了 :D - Bugs Happen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接