【源码】iOS指纹解锁Touch ID的开发

指纹解锁原理:

苹果在文件中对iPhone 5S配备的Touch ID指纹识别系统的功能与工做原理进行了详细说明。文件对iPhone 5S的A7处理器中““Secure Enclave””协处理器进行了说明,该协处理器可以安全地将用户储存的指纹信息与Touch ID当前所识别到的指纹进行信息对比。而苹果早在iPhone 5S发布时就公布了Touch ID的工做原理。但这次所获悉的文件说明得更为详细。安全

根据苹果的解释,一个单一的注册指纹与别人指纹出现随机匹配的几率为五万分之一。app

苹果声称““Secure Enclave””模块系统可以安全地管理并识别用户的指纹,并将用户的指纹信息独立地保存在别的系统中,同时经过加密内存和一个硬件随机数字密码发生器进行管理。iphone

每一个“Secure Enclave”是单独设置的,不能访问系统其余部分的,拥有本身的独立的UID(惟一的ID),连苹果也不知道这些UID。当设备启动时,Touch ID会临时建立一个秘钥,与“Secure Enclave”的UID配合,对设备的内存空间进行加密。this

而在苹果发布的文件中,苹果对A7处理器进行指纹识别受权的描述是:A7和Touch ID之间经过一个串行外设接口总线进行通讯。A7处理器将数据发到“Secure Enclave”,但并不对数据内容进行读取。加密和身份验证都是使用Touch ID和“Secure Enclave”之间的共享密钥。通讯密钥交换使用双方提供的一个随机AES密钥,并随机创建会话密钥和使用AES-CCM传输加密。加密

因为大部分的Touch ID用户可能发现,在某些状况下须要使用密码来代替Touch ID。而这份文件指出了什么状况下Touch ID不能使用和要求必须输入密码:lua

文件指出在如下状况下密码能够代替Touch ID:3d

-iPhone 5s刚刚开启或从新启动时;code

-iPhone 5s没有解锁超过48小时;blog

-通过5次不成功指纹匹配时;接口

-当进行设置或使用新的手指纹使用Touch ID时;

-iPhone 5s已经接收到远程锁定命令时。

指纹解锁代码实现:

 

因此咱们一开始须要判断当前系统版本

 


低于8.0的系统版本不支持指纹解锁

当系统版本大于8.0时,引入并导入头文件,书写代码!

 

 
 
 

//指纹识别

-(void)safeToFaceID

{

    if ([[UIDevice currentDevice] systemVersion].floatValue > 8.0) {

        //新建LAContext实例

        LAContext  *authenticationContext= [[LAContext alloc]init];

        NSError *error;

 

        //LAPolicyDeviceOwnerAuthentication

        //1:检查Touch ID 是否可用

        if ([authenticationContext canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error]) {

            NSLog(@"touchId 可用");

            //2:执行认证策略

            [authenticationContext evaluatePolicy:LAPolicyDeviceOwnerAuthentication localizedReason:@"请输入您的指纹进入应用" reply:^(BOOL success, NSError * _Nullable error) {

                if (success) {

                    NSLog(@"经过了Touch Id指纹验证");

                }else{

                    if (error.code == -2) {//点击了取消按钮

                        NSLog(@"点击了取消按钮");

                        NSLog (@"****** exit******");

                        exit (0);

                    }else if (error.code == -4){//按下电源键

                        NSLog(@"按下电源键");

                        NSLog (@"****** exit******");

                        exit (0);

                    }

                    //                else if (error.code == -7){//在有TouchID 的功能下,没有设置TouchID的运行结果

                    //                else if (error.code == -6){//在iphone5上运行结果(没有指纹解锁功能)

                    //                else if (error.code == -8){//输入错误3次

                    //                else if (error.code == -1){//连续三次指纹识别错误

                    //                NSLog(@"未经过Touch Id指纹验证,错误描述: %@---", error.description);

                }

            }];

        }else{//Touch ID功能被锁定,下一次须要输入系统密码

            NSLog(@"touchId 不可用");

            NSLog(@"error====%@",error.description);

            //提示用户不可用

            //        ?????

        }

        return;

    }

}

 

如下是常常出现的几个错误,你们共勉!

例如,在iphone5上运行结果:

Error Domain=com.apple.LocalAuthentication Code=-6 "Biometry is not available on this device." UserInfo=0x15ec5a00 {NSLocalizedDescription=Biometry is not available on this device.

例如,在模拟器上运行结果:

Error Domain=com.apple.LocalAuthentication Code=-1000 "Simulator is not supported." UserInfo=0x7ffe604b0790 {NSLocalizedDescription=Simulator is not supported.

例如,在有TouchID 的功能下,没有设置TouchID的运行结果:

Error Domain=com.apple.LocalAuthentication Code=-7 "No fingers are enrolled with Touch ID." UserInfo=0x170075fc0 {NSLocalizedDescription=No fingers are enrolled with Touch ID.

例如:连续三次指纹识别错误:

Error Domain=com.apple.LocalAuthentication Code=-1 "Aplication retry limit exceeded." UserInfo=0x1740797c0 {NSLocalizedDescription=Aplication retry limit exceeded.}

例如:用户在Touch ID对话框中点击了取消按钮:

Error Domain=com.apple.LocalAuthentication Code=-2 "Canceled by user." UserInfo=0x17006c780 {NSLocalizedDescription=Canceled by user.

例如:用户在Touch ID对话框中点击输入密码按钮:

Error Domain=com.apple.LocalAuthentication Code=-3 "Fallback authentication mechanism selected." UserInfo=0x17407e040 {NSLocalizedDescription=Fallback authentication mechanism selected.

例如:按下电源键:

Error Domain=com.apple.LocalAuthentication Code=-4 "UI canceled by system." UserInfo=0x170065900 {NSLocalizedDescription=UI canceled by system.}

例如:Touch ID功能被锁定,下一次须要输入系统密码时的运行结果:

Error Domain=com.apple.LocalAuthentication Code=-8 "Biometry is locked out." UserInfo={NSLocalizedDescription=Biometry is locked out.

相关文章
相关标签/搜索