android 9指纹认证_Android指纹认证教程
android 9指纹认证
Android指纹认证使用智能手机触摸传感器来认证用户。 Android Marshmallow引入了一组易于使用的触摸传感器API。 在Android Marshmallow之前,访问触摸传感器的方法不是标准的。
使用Android指纹认证有几个好处:
- 快速和容易使用
- 安全:指纹可以唯一识别您
- 网上交易更安全
使用Android指纹认证之前,您需要遵循几个步骤,并且一开始看起来似乎很复杂,但本教程将逐步指导您。
最终结果是一个使用指纹认证的Android应用,如下所示:
Android指纹认证入门
如前所述,启用指纹身份验证需要遵循几个步骤:
- 确认锁定屏幕是安全的,换句话说,它受PIN,密码或图案的保护
- 确认智能手机上至少注册了一个指纹
- 获取对Android密钥库的访问权限,以存储用于加密/解密对象的密钥
- 生成加密密钥和密码
- 开始认证过程
- 实现回调类以处理身份验证事件
就这些了!..我们将执行这些步骤。
在开始之前,请务必先获得使用触摸传感器和指纹认证的许可。 因此,在Manifest.xml
,我们添加:
<uses-permission android:name="android.permission.USE_FINGERPRINT" />
现在是时候创建处理所有身份验证过程的主要活动类了。
验证Android中的安全锁定屏幕
第一步是验证安全锁定屏幕。 可以完成KeyguardManager和FingerprintManager。 我们使用getSystemService获得这两个管理器的实例:
// Keyguard Manager
KeyguardManager keyguardManager = (KeyguardManager)getSystemService(KEYGUARD_SERVICE);// Fingerprint Manager
fingerprintManager = (FingerprintManager) getSystemService(FINGERPRINT_SERVICE);
现在,我们的身份验证应用可以检查是否满足所有安全条件:
private boolean checkFinger() {// Keyguard ManagerKeyguardManager keyguardManager = (KeyguardManager)getSystemService(KEYGUARD_SERVICE);// Fingerprint ManagerfingerprintManager = (FingerprintManager) getSystemService(FINGERPRINT_SERVICE);try {// Check if the fingerprint sensor is presentif (!fingerprintManager.isHardwareDetected()) {// Update the UI with a messagemessage.setText("Fingerprint authentication not supported");return false;}if (!fingerprintManager.hasEnrolledFingerprints()) {message.setText("No fingerprint configured.");return false;}if (!keyguardManager.isKeyguardSecure()) {message.setText("Secure lock screen not enabled");return false;}}catch(SecurityException se) {se.printStackTrace();}return true;
}
请注意,身份验证应用验证至少注册了一个指纹,否则身份验证过程将无法启动。
下图显示了当应用未找到注册的指纹时的消息错误。
如果一切正常,并且满足所有条件,则身份验证应用程序将生成密钥并访问Android商店。
访问Android密钥库并生成密钥
下一步是访问Android密钥库并生成用于加密数据的密钥。 该应用程序通过称为generateKey()的单独方法进行操作。
// Get the reference to the key store
keyStore = KeyStore.getInstance("AndroidKeyStore");
那么有必要获取对密钥生成器的引用:
// Key generator to generate the key
keyGenerator = KeyGenerator.getInstance(KeyProperties.KEY_ALGORITHM_AES, "AndroidKeyStore");
最后,我们必须初始化密钥生成器:
keyGenerator.init( newKeyGenParameterSpec.Builder(KEY_NAME,KeyProperties.PURPOSE_ENCRYPT |KeyProperties.PURPOSE_DECRYPT).setBlockModes(KeyProperties.BLOCK_MODE_CBC).setUserAuthenticationRequired(true).setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_PKCS7).build());keyGenerator.generateKey();
请注意,我们指定了密钥的用法:加密和解密,并且要求使用密钥本身进行身份验证。 最后,应用程序生成密钥(最后一行)。
下面是完整的方法:
private void generateKey() throws FingerprintException {try {// Get the reference to the key storekeyStore = KeyStore.getInstance("AndroidKeyStore");// Key generator to generate the keykeyGenerator = KeyGenerator.getInstance(KeyProperties.KEY_ALGORITHM_AES,"AndroidKeyStore");keyStore.load(null);keyGenerator.init( newKeyGenParameterSpec.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(KeyStoreException| NoSuchAlgorithmException| NoSuchProviderException| InvalidAlgorithmParameterException| CertificateException| IOException exc) {exc.printStackTrace();throw new FingerprintException(exc);}
}
创建Android密码
密钥准备好后,最后一步是创建使用我们之前生成的密钥的Android Cipher 。 源代码非常简单:
private Cipher generateCipher() throws FingerprintException {try {Cipher cipher = Cipher.getInstance(KeyProperties.KEY_ALGORITHM_AES + "/"+ KeyProperties.BLOCK_MODE_CBC + "/"+ KeyProperties.ENCRYPTION_PADDING_PKCS7);SecretKey key = (SecretKey) keyStore.getKey(KEY_NAME,null);cipher.init(Cipher.ENCRYPT_MODE, key);return cipher;}catch (NoSuchAlgorithmException| NoSuchPaddingException| InvalidKeyException| UnrecoverableKeyException| KeyStoreException exc) {exc.printStackTrace();throw new FingerprintException(exc);}
}
构建Android指纹应用
现在该组装所有这些方法并创建Android指纹认证应用程序了。 这个应用程序非常简单,它具有MainClass
,可以调用上面显示的方法并启动身份验证过程。
@Override
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);message = (TextView) findViewById(R.id.fingerStatus);Button btn = (Button) findViewById(R.id.authBtn);final FingerprintHandler fph = new FingerprintHandler(message);if (!checkFinger()) {btn.setEnabled(false);}else {// We are ready to set up the cipher and the keytry {generateKey();Cipher cipher = generateCipher();cryptoObject =new FingerprintManager.CryptoObject(cipher);}catch(FingerprintException fpe) {// Handle exceptionbtn.setEnabled(false);}}btn.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {message.setText("Swipe your finger");fph.doAuth(fingerprintManager, cryptoObject);}});
}
有一些注意事项。 首先,Android应用程序创建一个在身份验证过程中使用的CryptoObject
。 此外,该应用程序显示一个按钮,当用户单击它时,身份验证过程开始。 如果不满足上述初始条件,则禁用该按钮。 要注意的最重要的事情是称为FingerprintHandler
新类。 此类是一个接收身份验证过程事件的回调类。 此外,此类使用doAuth方法启动身份验证过程。
Android指纹认证回调
最后一步是创建回调类,以便我们可以接收事件通知,并且可以知道何时身份验证成功或出现问题。 此类扩展了FingerprintManager .AuthenticationCallback 。
public class FingerprintHandler extends FingerprintManager.AuthenticationCallback {private TextView tv;public FingerprintHandler(TextView tv) {this.tv = tv;}@Overridepublic void onAuthenticationError(int errorCode, CharSequence errString) {super.onAuthenticationError(errorCode, errString);tv.setText("Auth error");}@Overridepublic void onAuthenticationHelp(int helpCode, CharSequence helpString) {super.onAuthenticationHelp(helpCode, helpString);}@Overridepublic void onAuthenticationSucceeded(FingerprintManager.AuthenticationResult result) {super.onAuthenticationSucceeded(result);tv.setText("auth ok");tv.setTextColor(tv.getContext().getResources().getColor(android.R.color.holo_green_light));}@Overridepublic void onAuthenticationFailed() {super.onAuthenticationFailed();}public void doAuth(FingerprintManager manager, FingerprintManager.CryptoObject obj) {CancellationSignal signal = new CancellationSignal();try {manager.authenticate(obj, signal, 0, this, null);}catch(SecurityException sce) {}}
}
有一些重要的方法需要注意。 首先,启动身份验证过程的doAuth。 此方法具有CryptoObject,取消信号和回调侦听器(此类)。 下图显示了正在运行的应用程序:
在这种情况下,将使用Android指纹认证对用户进行认证 。
如何在Android模拟器中测试应用
要测试该应用,可以使用带有触摸传感器的真实设备。 无论如何,也可以在模拟器中测试应用程序。 在开始使用该应用程序之前,您必须配置指纹访问“安全性”菜单。 当系统询问指纹时,您必须使用adb命令来模拟手指触摸:
adb -e emu finger touch id(like 1,2, ecc.)
最后,完成配置后,您将看到以下消息:
希望在本文结尾处,您获得了有关Android指纹api以及如何开发Android指纹示例应用程序的知识。
翻译自: https://www.javacodegeeks.com/2016/12/android-fingerprint-authentication-tutorial.html
android 9指纹认证
android 9指纹认证_Android指纹认证教程相关推荐
- android指纹解锁_Android指纹锁
android指纹解锁 In this tutorial, we'll be discussing the Android Fingerprint API and implement a Finger ...
- 指纹安全系统--双因子认证(2FA)解决方案
双因子认证(2FA)解决方案 方案应用背景 应用需求 方案阐述 一.方案特点 二.方案设计 三.方案组成 四.环境要求 方案应用背景 随着企业日益发展的需求,企业IT管理面临越来越大的压力与挑战.得益 ...
- android指纹测试,Android_指纹识别测试
Demo地址 注意 必须要了解的是指纹识别是从6.0开始添加的 这样的话,想要使用Api就要把App改到23以上 指纹识别的库都在android.hardware.fingerprint这个包下面 申 ...
- Android之android studio如何获取证书指纹 (SHA1)
android studio如何获取证书指纹 (SHA1) 为什么要用SHA1 我们做百度地图或是高德地图的时候.注册app信息要求填写数字签名 我们可以通过外部命令行获取,也可以通过eclipse ...
- 如何在Android Studio中获取SHA-1指纹证书以获得调试模式?
本文翻译自:How to get the SHA-1 fingerprint certificate in Android Studio for debug mode? I have shifted ...
- android人脸身份认证,Android通过支付宝进行刷脸认证
Android通过支付宝进行刷脸认证 官方文档快速接入 一.简介 支付宝刷脸认证是通过支付宝人脸识别进行身份校验,主要包括三个模块身份认证初始化服务.开始认证.认证结果查询 二.应用场景 认证场景码 ...
- 2022 IDEA (学生邮箱认证)安装使用教程以及基础配置教程
2022 IDEA (学生邮箱认证)安装使用教程以及基础配置教程 1. IDEA 下载安装 a. IDEA 下载 b. 安装 IDEA c. 打开软件 2. 利用教育邮箱进行学生认证 a. 进行学生认 ...
- Kerberos认证原理与使用教程
Kerberos认证原理与使用教程 一.Kerberos 概述 二.什么是 Kerberos Kerberos 是一种计算机网络认证协议,用来在非安全网络中,对个人通信以安全的手段进行身份认证.这 ...
- android 802.1x 认证,802.1X认证基础
802.1X认证基础 802.1X认证简介 定义 802.1X协议是一种基于端口的网络接入控制协议(Port based networkaccess control protocol)."基 ...
- Android Wi-Fi EAP-TLS/EAP-PEAP/EAP-TTLS(扩展认证协议)简介
1 扩展认证协议 英语: Extensible Authentication Protocol ,縮寫為 EAP,是一个在[无线网络][0]或點對點連線中普遍使用的认证框架.它被定义在RFC 3748 ...
最新文章
- 线性代数--矩阵、向量
- geotools的dotnet版本
- php7+apache2.4配置
- 前端实现数字快速递增_艾默生新型超声波发生器的数字控制功能可实现快速设置和准确操作...
- mac终端mysql的字符集_mac下修改mysql默认字符集为utf8
- python视频处理教程_Python视频编辑库:MoviePy|python爬虫|python入门|python教程
- win10+tensorflow faster-RCNN 训练自己的数据集
- pagehelper 不分页的解决方法
- 一次CDN源站负载高的问题排查及解决
- 决策支持系统是什么?
- 硕思闪客精灵怎么导出flash(gif)动画,flash游戏源文件疑难问题解答(注册码)
- 微信好友只有昵称没有微信号_没微信号能找到人吗 只有微信昵称怎么找人
- phpstudy php56 zend,phpstudy集成环境
- Spring MVC拦截器(一)---定义,配置及单个拦截器执行流程
- CnOpenData中国小区及二手房交易数据简介
- 实战案例分享:我用 Python 预测房价走势
- 一些专业术语的中英文对照
- Redis6.0以后版本安装报错问题
- MySQL事务——事务隔离界别,MVCC
- 利用Composer搭建企业内部仓库