专栏首页恩蓝脚本浅谈Android 指纹解锁技术

浅谈Android 指纹解锁技术

什么是指纹解锁技术

根据人的指纹来验证是否能够解锁的技术,类似于通过输入密码来解锁,都是通过一定的数字特征来解锁。

指纹解锁技术原理理解

首先说明每个人的每个指纹信息都是独一无二的,皮肤纹路在图案,断点,交叉点上各不相同,通过光学感应读出指纹的图片信息也是独一无二的。

先保存一个人的指纹特征(图片信息根据算法生成的数据),然后再使用时利用这个人的这个指纹特征去和先前保存的指纹特征做对比,对比一致则解锁成功,对比不一致则解锁失败,对比结果并不是100%一样,而可以按照一个比例来判定,比如90%一样,也可以判定为一致,这个可以根据硬件来设定。

指纹解锁技术的优势和缺点

优点:1.使用便捷,直接使用自身的生物特征就可判断能否使用,判别速度快,而输入数字或者拼图解锁是麻烦的并且容易被别人看到。

缺点:1.安全性不高,指纹是可以被收集的,所以一旦别人收集了你的指纹信息,那需要你指纹解锁的东西将非常危险,而且在不注意的情况下很容易被有心的人收集。

在Android中的应用开发

对Android系统来说,指纹解锁是Android6.0才添加的新功能,到Android P系统还会强化指纹解锁的功能,提供越来越便捷的API。

android.hardware.fingerprint

可以看到在Android P系统中FingerprintDialog以及其中的包含类将会替代FingerprintManager以及其中包含类。原理应该差不多,封装的更简洁易用。

废话少说,在Android手机中如何开发?

1.在应用AndroidManifest.xml文件中添加权限:

<uses-permission android:name="android.permission.USE_FINGERPRINT"/ 

2.获取到指纹管理对象的引用:

FingerprintManagerCompat fingerprint = FingerprintManagerCompat.from(this);  //v4包下的API,包装内部已经判断Android系统版本是否大于6.0,这也是官方推荐的方式
FingerprintManager fingerprint2 = (FingerprintManager) getSystemService(Context.FINGERPRINT_SERVICE); //Android 6.0包下的API

其实指纹对象依次调用三个方法就够了,

第一步

/**
   * Determine if fingerprint hardware is present and functional.
   * @return true if hardware is present and functional, false otherwise.
   */
  fingerprint.isHardwareDetected(); // 判断设备是否支持指纹解锁

第二步

/**
   * Determine if there is at least one fingerprint enrolled.
   * @return true if at least one fingerprint is enrolled, false otherwise
   */
  fingerprint.hasEnrolledFingerprints(); //判断设备是否以保存过指纹信息,至少需要保存过一个

第三步

/**
* @param crypto object associated with the call or null if none required.  //不太理解,加密指纹特征还是什么,可以不加密置为null
* @param flags optional flags; should be 0 //设置标记,暂时无用
* @param cancel an object that can be used to cancel authentication   //取消验证
* @param callback an object to receive authentication events  //系统认证完成之后,回调该接口
* @param handler an optional handler for events //处理callback接口后,界面的处理,默认是主线程handler
*/
fingerprint.authenticate(crypto, flags,cancel,callback,handler) //验证指纹
再来说明各个参数的实现
crypto = null; //可以置为null,愿意了解的人可以参考底部博客和源码
flags = 0;
cancel = new CancellationSignal();
callback = new FingerprintManagerCompat.AuthenticationCallback() {
@Override
public void onAuthenticationError(int errMsgId, CharSequence errString) {
super.onAuthenticationError(errMsgId, errString);
//验证错误时,回调该方法。当连续验证5次错误时,将会走onAuthenticationFailed()方法
handler.obtainMessage(1,errMsgId,0).sendToTarget();
}
@Override
public void onAuthenticationSucceeded(FingerprintManagerCompat.AuthenticationResult result) {
super.onAuthenticationSucceeded(result);
//验证成功时,回调该方法。fingerprint对象不能再验证
handler.obtainMessage(2).sendToTarget();
}
@Override
public void onAuthenticationFailed() {
super.onAuthenticationFailed();
//验证失败时,回调该方法。fingerprint对象不能再验证并且需要等待一段时间才能重新创建指纹管理对象进行验证
handler.obtainMessage(3).sendToTarget();
}
};
handler = new Handler(getMainLooper()) {  //也可以置为null,系统自动处理
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case 1:  //验证错误
//todo 界面处理
handleErrorCode(msg.arg1);
break;
case 2:  //验证成功
//todo 界面处理
cancel = null;
break;
case 3:  //验证失败
//todo 界面处理
cancel = null;
break;
default:
super.handleMessage(msg);
}
};
//对应不同的错误,可以有不同的操作
private void handleErrorCode(int code) {
switch (code) {
case FingerprintManager.FINGERPRINT_ERROR_CANCELED:
//todo 指纹传感器不可用,该操作被取消
break;
case FingerprintManager.FINGERPRINT_ERROR_HW_UNAVAILABLE:
//todo 当前设备不可用,请稍后再试
break;
case FingerprintManager.FINGERPRINT_ERROR_LOCKOUT:
//todo 由于太多次尝试失败导致被锁,该操作被取消
break;
case FingerprintManager.FINGERPRINT_ERROR_NO_SPACE:
//todo 没有足够的存储空间保存这次操作,该操作不能完成
break;
case FingerprintManager.FINGERPRINT_ERROR_TIMEOUT:
//todo 操作时间太长,一般为30秒
break;
case FingerprintManager.FINGERPRINT_ERROR_UNABLE_TO_PROCESS:
//todo 传感器不能处理当前指纹图片
break;
}
}

以上就是本文的全部内容,希望对大家的学习有所帮助。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • django model的update时auto_now不被更新的原因及解决方式

    gmt_create自动添加auto_now_add;gmt_modify自动更新auto_now

    砸漏
  • Laravel 手动开关 Eloquent 修改器的操作方法

    测试框架版本是 Laravel 6.5, Eloquent 修改器使用可以参阅 – 查看文档

    砸漏
  • Android添加指纹解锁功能的实现代码

    指纹解锁技术成为当前验证用户信息的重要手段,基本上当前手机都配置了指纹解锁。当开发的APP需要加密验证时可以考虑添加系统指纹解锁功能。

    砸漏
  • Andriod8.1之测量生物识别解锁模式的安全性

    (2017年12月5号Google更新了Android8.1的CDD) 如今,基于生物识别的解锁模式几乎仅通过错误接受率 (FAR) 指标(即模型错误地接受随机...

    安智客
  • 拍照比“剪刀手”泄露指纹信息?业内专家四点辟谣

    某行业协会专家称,拍照时如果镜头距离够近,“剪刀手”照片通过照片放大技术和人工智能增强技术,可以将照片中人物的指纹信息还原出来。

    AI掘金志
  • 一篇文章教你从入门到精通 Google 指纹验证功能

    Google 从 Android 6.0开始,提供了开放的指纹识别相关 API,通过此篇文章可以帮助开发者接入指纹验证的基础功能,并且提供了系统应用基于指纹验证...

    2020labs小助手
  • 信息安全——指纹将成为未来信息安全的马蜂窝

    指纹的唯一性使其成为人体鉴别的一个重要生物特征,我们可以轻易地举出几个例子,警察判案常通过指纹识别,现在很多门禁系统采用指纹识别,有些手机的“大门”采用的就是指...

    博文视点Broadview
  • python 加载excel报错

    file1=pd.read_excel('F:/dataanalysis/statistics/PelicanStores.xlsx')

    py3study
  • 项目需求讨论- 让APP知道是用哪个指纹来支付和解锁

    传送门: 项目需求讨论-APP手势解锁及指纹解锁 那时候做的APP解锁是调用系统的指纹解锁功能,同时,进行指纹验证的时候,只要是手机中录制过的指纹,然后在指纹验...

    青蛙要fly
  • 刷脸还是指纹识别,that's a question

    据 Patently Apple 消息,近日,苹果在欧洲和美国被授予了一件专利,根据专利介绍,这是一种特殊设计的OLED屏幕,能够读取感应到的指纹。据了解这一专...

    企鹅号小编

扫码关注云+社区

领取腾讯云代金券