-1

我正在为应用程序使用指纹身份验证。还想支持 API 23 以下。为此,我正在使用FingerprintManagerCompat。我不知道如何在 Pre-Android API 23 中生成密钥Chiper 启动。

下面的代码用于 API 23 - 生成密钥

protected void generateKey() {
    try {
        keyStore = KeyStore.getInstance("AndroidKeyStore");
    } catch (Exception e) {
        e.printStackTrace();
    }

    try {
        keyGenerator = KeyGenerator.getInstance(KeyProperties.KEY_ALGORITHM_AES, "AndroidKeyStore");
    } catch (NoSuchAlgorithmException |
            NoSuchProviderException e) {
        throw new RuntimeException("Failed to get KeyGenerator instance", e);
    }

    try {
        keyStore.load(null);
        keyGenerator.init(new
                KeyGenParameterSpec.Builder(KEY_NAME,
                KeyProperties.PURPOSE_ENCRYPT |
                        KeyProperties.PURPOSE_DECRYPT)
                .setBlockModes(KeyProperties.BLOCK_MODE_CBC)
                .setUserAuthenticationRequired(true)
                .setEncryptionPaddings(
                        KeyProperties.ENCRYPTION_PADDING_PKCS7)
                .build());
        keyGenerator.generateKey();
    } catch (NoSuchAlgorithmException |
            InvalidAlgorithmParameterException
            | CertificateException | IOException e) {
        throw new RuntimeException(e);
    }
}

以下代码用于 API 23 - 芯片启动

public boolean cipherInit() {
    try {
        cipher = Cipher.getInstance(KeyProperties.KEY_ALGORITHM_AES + "/" + KeyProperties.BLOCK_MODE_CBC + "/" + KeyProperties.ENCRYPTION_PADDING_PKCS7);
    } catch (NoSuchAlgorithmException |
            NoSuchPaddingException e) {
        throw new RuntimeException("Failed to get Cipher", e);
    }

    try {
        keyStore.load(null);
        SecretKey key = (SecretKey) keyStore.getKey(KEY_NAME, null);
        cipher.init(Cipher.ENCRYPT_MODE, key);
        return true;
    } catch (KeyStoreException | CertificateException
            | UnrecoverableKeyException | IOException
            | NoSuchAlgorithmException | InvalidKeyException e) {
        throw new RuntimeException("Failed to init Cipher", e);
    }
}

我不知道如何在 Pre API 23 中启动这两个东西来访问FingerprintManagerCompat,帮我解决这个问题。

4

2 回答 2

0

不可以。您不能在 API 23(Marshmallow 6.0)以下生成密钥和密码。

一些android设备的指纹传感器低于API 21,但android只支持API 23及以上。你必须使用他们的sdk进行指纹认证。三星提供他们自己的sdk进行指纹认证,即Pass Sdk。

你可以看到这个链接。指纹认证的示例项目在这里

于 2016-11-30T09:39:13.317 回答
0

FingerprintManager 在 pre-marshmallow 设备中不可用。他们在 Marshamallow 中添加了这个 API,在这里指定

于 2016-11-19T08:10:14.210 回答