美文网首页
# android 指纹识别并检测指纹库是否变更

# android 指纹识别并检测指纹库是否变更

作者: justin_crashed | 来源:发表于2020-08-13 11:16 被阅读0次

    android API 23时新增的功能,指纹识别

    主要类:FingerpringManager

    在API28后,FingerpringManager被遗弃,使用BiometricPrompt,此时授权识别的弹窗不能自定义,
    只能使用官方统一弹窗,只能设置各个授权文案。各个开发商内部实现可能不一致。

    通过只是使用指纹识别,直接使用官方api即可,但出于安全或业务场景需求,很多都需要去检测生物库信息是否变更,
    如指纹库在重新指纹识别前是否发生变更,这个官方api就没有提供方法,需要我们自己实现。

    检测指纹库是否发生变更

    参考:

    通过检测密钥查看是否变更(https://www.jianshu.com/p/dbb1a43cfb21)

    在API28以前,指纹库信息时可以通过反射获取,获取的信息有指纹id、groupId、指纹名称、指纹个数、设备id等等,

    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        Log.d(TAG, "getFingerPrintInfo: ");
        FingerprintManager fingerprintManager = (FingerprintManager) getCurrentActivity().getSystemService(Context.FINGERPRINT_SERVICE);
        try{
            Class clz = Class.forName("android.hardware.fingerprint.FingerprintManager");
            Method method = clz.getDeclaredMethod("getEnrolledFingerprints", new Class[]{});
            method.setAccessible(true);
            Object obj = method.invoke(fingerprintManager, null);
            if (obj != null) {
                Log.e(TAG, "objStr:" + JsonUtils.toJson(obj));
                List<FingerprintBean> list = (List<FingerprintBean>) JsonUtils.fromJson(objStr, new TypeToken<List<FingerprintBean>>(){}.getType());
            }
        }catch (Exception e) {
            e.printStackTrace();
        }
    }
    

    而FingerprintBean是这样的:

    
    public class FingerprintBean implements Serializable {
    
        private static final long serialVersionUID = 1L;
        private long mDeviceId;
        private long mFingerId;
        private long mGroupId;
        private String mName;
    }
    
    

    最理想的方式是我们反射获取到这些指纹库信息,然后将这些信息保存到本地,每次调用指纹识别时,获取当前指纹库信息与之前的指纹库信息比较,
    只有不同即可判定指纹库信息变更,
    但在实际操作中,发现在手机上获取到的指纹id只是简单的1、2、3即指纹库里的排列顺序,而指纹名称是可以随意更改,groupId、deviceId都为0,
    如果使用这些信息去校验,错误率太高。

    还有一种方式即是上面参考链接中的,
    检测指纹库密钥信息是否变更

    但在上面链接那种方法中,有几个问题:
    1、增加、删除指纹无法检测
    2、使用修改指纹的手指识别后才能检测出修改

    于是将反射、密钥检测两者结合,
    先反射获取指纹库信息,只是比较指纹库指纹个数,先判断指纹个数是否发生变更,就可知道指纹库信息变更了
    如果指纹个数没有变更,再来校验密钥是否发生变化

    相关文章

      网友评论

          本文标题:# android 指纹识别并检测指纹库是否变更

          本文链接:https://www.haomeiwen.com/subject/bxjbdktx.html