新版兼容的指纹识别代码

76 阅读1分钟
val executor = Executors.newSingleThreadExecutor()
                val biometricPrompt = BiometricPrompt.Builder(this)
                    .setTitle("指纹认证")
                    .setSubtitle("请使用指纹进行身份验证")
                    .setDescription("将您的指纹放置在传感器上")
                    .setNegativeButton("取消", executor,
                        DialogInterface.OnClickListener { _, _ ->
                            // 处理取消操作
                        })
                    .build()

                val callback = @RequiresApi(Build.VERSION_CODES.P)
                object : BiometricPrompt.AuthenticationCallback() {
                    override fun onAuthenticationError(errorCode: Int, errString: CharSequence) {
                        // 处理认证错误
                    }

                    override fun onAuthenticationSucceeded(result: BiometricPrompt.AuthenticationResult) {
                        // 处理认证成功
                        val cryptoObject = result.cryptoObject
                        // 使用 cryptoObject 进行加密/解密等操作
                    }

                    override fun onAuthenticationFailed() {
                        // 处理认证失败
                    }
                }
                val keyStore = KeyStore.getInstance("AndroidKeyStore")
                keyStore.load(null)

                val keyGenerator = KeyGenerator.getInstance(KeyProperties.KEY_ALGORITHM_AES, "AndroidKeyStore")
                val builder = KeyGenParameterSpec.Builder(
                    "biometric_key",
                    KeyProperties.PURPOSE_ENCRYPT or KeyProperties.PURPOSE_DECRYPT
                )
                builder.setBlockModes(KeyProperties.BLOCK_MODE_CBC)
                builder.setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_PKCS7)
                keyGenerator.init(builder.build())
                keyGenerator.generateKey()

                val cipher = Cipher.getInstance(
                    KeyProperties.KEY_ALGORITHM_AES + "/"
                            + KeyProperties.BLOCK_MODE_CBC + "/"
                            + KeyProperties.ENCRYPTION_PADDING_PKCS7
                )
                val key = keyStore.getKey("biometric_key", null) as SecretKey
                cipher.init(Cipher.ENCRYPT_MODE, key)
                val cryptoObject = BiometricPrompt.CryptoObject(cipher) // 使用一个合适的 Cipher 对象

                biometricPrompt.authenticate(cryptoObject, CancellationSignal(), executor, callback)