1 题: Android KeyStoreException:

在...创建的问题 Tue, Apr 19, 2016 12:00 AM

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

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

    
14
  1. 您是否使用keytool制作自签名证书或者您使用的是调试证书?听起来它不喜欢Mac地址
    2016-04-18 20:40:31Z
  2. @ user3535611 MAC =消息验证码,不是媒体访问控制。
    2016-04-18 22:24:28Z
  3. 密钥库的身份验证标记失败。似乎流式传输正在发生,因此可能是验证失败的经过验证的密码。 可能表示指纹验证后错误的密钥可用。如果我知道为什么会发生这种情况。
    2016-04-18 22:27:55Z
  4. 身份验证问题?显示权限?
    2016-04-18 22:28:42Z
  5. @ Philipp你有解决问题的方法
    2018-01-30 07:31:09Z
  6. 醇>
    1答案                              1 跨度>                         

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

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

    提示:

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

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

    坚持你的屁股

        
    2
    2018-04-26 15:37:15Z
    1. 侏罗纪公园参考:D
      2019-06-19 04:30:42Z
    2. 醇>
来源放置 这里