指纹解锁原理:
苹果在文件中对iPhone 5S配备的Touch ID指纹识别系统的功能与工作原理进行了详细说明。文件对iPhone 5S的A7处理器中““Secure Enclave””协处理器进行了说明,该协处理器能够安全地将用户储存的指纹信息与Touch ID当前所识别到的指纹进行信息对比。而苹果早在iPhone 5S发布时就公布了Touch ID的工作原理。但此次所获悉的文件说明得更为详细。
根据苹果的解释,一个单一的注册指纹与别人指纹出现随机匹配的概率为五万分之一。
苹果声称““Secure Enclave””模块系统能够安全地管理并识别用户的指纹,并将用户的指纹信息独立地保存在别的系统中,同时通过加密内存和一个硬件随机数字密码发生器进行管理。
每个“Secure Enclave”是单独设置的,不能访问系统其他部分的,拥有自己的独立的UID(唯一的ID),连苹果也不知道这些UID。当设备启动时,Touch ID会临时创建一个秘钥,与“Secure Enclave”的UID配合,对设备的内存空间进行加密。
而在苹果发布的文件中,苹果对A7处理器进行指纹识别授权的描述是:A7和Touch ID之间通过一个串行外设接口总线进行通信。A7处理器将数据发到“Secure Enclave”,但并不对数据内容进行读取。加密和身份验证都是使用Touch ID和“Secure Enclave”之间的共享密钥。通信密钥交换使用双方提供的一个随机AES密钥,并随机建立会话密钥和使用AES-CCM传输加密。
由于大部分的Touch ID用户可能发现,在某些情况下需要使用密码来代替Touch ID。而这份文件指出了什么情况下Touch ID不能使用和要求必须输入密码:
文件指出在以下情况下密码可以代替Touch ID:
-iPhone 5s刚刚开启或重新启动时;
-iPhone 5s没有解锁超过48小时;
-经过5次不成功指纹匹配时;
-当进行设置或使用新的手指纹使用Touch ID时;
-iPhone 5s已经接收到远程锁定命令时。
指纹解锁代码实现:
在iPhone5s的时候,苹果推出了指纹解锁。但是在ios8.0的时候苹果才推出相关的接口。
所以我们一开始需要判断当前系统版本
低于8.0的系统版本不支持指纹解锁
当系统版本大于8.0时,引入并导入头文件,书写代码!
以下是经常出现的几个错误,大家共勉!
例如,在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.
七. 指纹识别
简单介绍
指纹识别功能是 iphone 5S之后推出的.SDK是 iOS 8.0 推出!
推出指纹识别功能的目的,是为了简化移动支付环节,占领移动支付市场.
使用步骤
导入框架
#import
获得当前系统版本号
floatversion = [UIDevicecurrentDevice].systemVersion.floatValue;if(version <8.0)// 判断当前系统版本 {NSLog(@"系统版本太低,请升级至最新系统");return; }
实例化指纹识别对象,判断当前设备是否支持指纹识别功能(是否带有TouchID)
// 1> 实例化指纹识别对象LAContext *laCtx = [[LAContext alloc] init];// 2> 判断当前设备是否支持指纹识别功能.if(![laCtx canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:NULL]) {// 如果设备不支持指纹识别功能NSLog(@"该设备不支持指纹识别功能");return; };
指纹登陆(默认是异步方法)
[laCtx evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:@"指纹登陆"reply:^(BOOLsuccess,NSError*error) {// 如果成功,表示指纹输入正确.if(success) {NSLog(@"指纹识别成功!"); }else{NSLog(@"指纹识别错误,请再次尝试"); } }];