iOS8指纹识别TouchID

苹果在2014年6月3日的WWDC2014开幕式上推出了新版iOS8系统,界面上iOS8与iOS7相比变化不大,只是在功能方面进行了完好。iOS8通知中心更加强大,支持消息直接回复操作,并支持QuickType和第三方输入法。短信功能改进明显,支持群聊。发送语音、视频,分享地理位置等。从终端用户的角度看。iOS8的很多新功能早已出如今其它平台中。iOS8会向第三方软件开放TouchID訪问,这意味着能够使用该感应器登陆银行应用等。

第三方应用能够使用TouchID接口,意味着未来的非常多应用都能够用指纹识别功能了。你能够选择Touch ID登陆第三方应用程序,不须要输入password,你的指纹数据是被保护的,在没有被同意的情况下别的程序是訪问不到它的。

                    

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveXVqaWFueGlhbmc2NjY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" height="165" width="275">

依据苹果的解释,一个单一的注冊指纹与别人指纹出现随机匹配的概率为五万分之中的一个。

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

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

而在苹果公布的文件里。苹果对A7处理器进行指纹识别授权的描写叙述是:A7和Touch ID之间通过一个串行外设接口总线进行通信。A7处理器将数据发到“Secure Enclave”。但并不正确数据内容进行读取。加密和身份验证都是使用Touch ID和“Secure Enclave”之间的共享密钥。

通信密钥交换使用两方提供的一个随机AES密钥,并随机建立会话密钥和使用AES-CCM传输加密。

据了解:iPhone 5s中的指纹传感器检測到的表皮上突起的纹线。

它检測到的不是用户手指外部的死皮指纹,这样的指纹非常easy被复制。iPhone 5s的指纹传感器利用射频信号。检測用户手指表面下方那一层皮肤的“活”指纹。假设手指与人的身体分离,那么传感器是无法检測到这样的指纹的。所以用户不用操心自己的指纹被复制或盗窃之后,被用于解锁设备,由于传感器是无法识别这样的“死”指纹的。

近期研究了下iOS8的文档,对指纹识别了解了下,并下载了一个官方提供的Demo。可是

NS_CLASS_AVAILABLE(10_10, 8_0)

从这句中能够看出,要想使用TouchID的接口,电脑的mac系统必须是10.10的,手机iOS系统必须是8.0,所以为了这个Demo我也没有升级电脑系统(毕竟还不稳定)。

但依据Demo中的代码和文档能够看出,TouchID的基本使用方法。

1.首先要使用TouchID。要先导入依赖包:LocalAuthentication.framework

2.检查设备能否用TouchID,返回检查结果BOOL类型success:

LAContext *context = [[LAContext alloc] init];
    __block  NSString *msg;
    NSError *error;
    BOOL success;

    // test if we can evaluate the policy, this test will tell us if Touch ID is available and enrolled
    success = [context canEvaluatePolicy: LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error];
    if (success) {
        msg =[NSString stringWithFormat:NSLocalizedString(@"TOUCH_ID_IS_AVAILABLE", nil)];
    } else {
        msg =[NSString stringWithFormat:NSLocalizedString(@"TOUCH_ID_IS_NOT_AVAILABLE", nil)];
    }

3.假设设备能使用TouchID。代码块中返回识别结果BOOL类型的success:

LAContext *context = [[LAContext alloc] init];
    __block  NSString *msg;

    // show the authentication UI with our reason string
    [context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:NSLocalizedString(@"UNLOCK_ACCESS_TO_LOCKED_FATURE", nil) reply:
     ^(BOOL success, NSError *authenticationError) {
         if (success) {
             msg =[NSString stringWithFormat:NSLocalizedString(@"EVALUATE_POLICY_SUCCESS", nil)];
         } else {
             msg = [NSString stringWithFormat:NSLocalizedString(@"EVALUATE_POLICY_WITH_ERROR", nil), authenticationError.localizedDescription];
         }
     }];

4.对于检查和识别的两个方法在 LocalAuthentication.framework/Headers/LAContext.h 中定义的:

/// Determines if a particular policy can be evaluated.
///
/// @discussion Policies can have certain requirements which, when not satisfied, would always cause
///             the policy evaluation to fail. Examples can be a passcode set or a fingerprint
///             enrolled with Touch ID. This method allows easy checking for such conditions.
///
///             Applications should consume the returned value immediately and avoid relying on it
///             for an extensive period of time. At least, it is guaranteed to stay valid until the
///             application enters background.
///
/// @warning    Do not call this method in the reply block of evaluatePolicy:reply: because it could
///             lead to a deadlock.
///
/// @param policy Policy for which the preflight check should be run.
///
/// @param error Optional output parameter which is set to nil if the policy can be evaluated, or it
///              contains error information if policy evaluation is not possible.
///
/// @return YES if the policy can be evaluated, NO otherwise.
- (BOOL)canEvaluatePolicy:(LAPolicy)policy error:(NSError * __autoreleasing *)error;

/// Evaluates the specified policy.
///
/// @discussion Policy evaluation may involve prompting user for various kinds of interaction
///             or authentication. Actual behavior is dependent on evaluated policy, device type,
///             and can be affected by installed configuration profiles.
///
///             Be sure to keep a strong reference to the context while the evaluation is in progress.
///             Otherwise, an evaluation would be canceled when the context is being deallocated.
///
///             The method does not block. Instead, the caller must provide a reply block to be
///             called asynchronously when evaluation finishes. The block is executed on a private
///             queue internal to the framework in an unspecified threading context. Other than that,
///             no guarantee is made about which queue, thread, or run-loop the block is executed on.
///
///             Implications of successful policy evaluation are policy specific. In general, this
///             operation is not idempotent. Policy evaluation may fail for various reasons, including
///             user cancel, system cancel and others, see LAError codes.
///
/// @param policy Policy to be evaluated.
///
/// @param reply Reply block that is executed when policy evaluation finishes.
///
/// @param localizedReason Application reason for authentication. This string must be provided in correct
///                        localization and should be short and clear. It will be eventually displayed in
///                        the authentication dialog subtitle. A name of the calling application will be
///                        already displayed in title, so it should not be duplicated here.
///
/// @param success Reply parameter that is YES if the policy has been evaluated successfully or NO if
///                the evaluation failed.
///
/// @param error Reply parameter that is nil if the policy has been evaluated successfully, or it contains
///              error information about the evaluation failure.
///
/// @warning localizedReason parameter is mandatory and the call will throw NSInvalidArgumentException if
///          nil or empty string is specified.
///
/// @see LAError
///
/// Typical error codes returned by this call are:
/// @li          LAErrorUserFallback if user tapped the fallback button
/// @li          LAErrorUserCancel if user has tapped the Cancel button
/// @li          LAErrorSystemCancel if some system event interrupted the evaluation (e.g. Home button pressed).
- (void)evaluatePolicy:(LAPolicy)policy localizedReason:(NSString *)localizedReason reply:(void(^)(BOOL success, NSError *error))reply;

欢迎小伙伴们对測试结果检验一下啊!

(转载请注明出处,谢谢!

http://blog.csdn.net/yujianxiang666/article/details/35280025)

时间: 2024-10-12 19:54:30

iOS8指纹识别TouchID的相关文章

iOS 钥匙串 指纹识别 get和Post请求的区别

01-钥匙串 1. 通过系统提供的钥匙串功能可以在本地保存密码,系统使用AES的方式对密码加密 a. 查看Safari中保存的密码 2. 使用第三方框架SSKeychain把密码保存到钥匙串和获取钥匙串中的密码 a. 获取钥匙串中的所有用户 [SSKeychain allAccounts] b. 把密码保存到钥匙串中 service可以用boundleID [SSKeychain setPassword:self.pwdView.text forService:kPWDCHAINKEY acco

深夜闲聊节目:华为 Mate7的指纹识别安全么?

许久没有写过任何东西,最近很忙而且还要准备找工作之类的,唉... ....今天的文章也不说技术,只是闲聊. 一.手机指纹识别一揽 打开很多网站.论坛的科技栏目,充斥着各种手机讯息!仿佛手机已经成了科技的代名词.更凶残的是,今年科技界,哦不,手机界永远少不了各种新闻:先是Zealer 和锤子的骂战,再是魅族攒了一年的新闻一起发,紧接着联想.HTC.Moto 不断放大招,最后是苹果的亮相.水货价格更是闪瞎我等屌丝的氪金狗眼 ... ... 手机/科技界的故事还远远没有尽头! 但是,但是... ...

iOS TouchID 指纹识别

////  ViewController.m//  touchID////  Created by 谢泽锋 on 16/4/1.//  Copyright © 2016年 xiezefeng. All rights reserved.// #import "ViewController.h"#import <LocalAuthentication/LocalAuthentication.h>@interface ViewController ()//验证设备是否支持Touc

指纹识别

现在,在要求安全与效率兼得的时候,普通密码已不能满足我们的要求,指纹识别就这样诞生了. 每个人都有自己专属的指纹,在需要支付等输入密码的地方,我们只需轻轻一按即可,避免了输入密码的繁琐步骤,更加安全,而且妈妈再也不用担心我们忘记密码. 好了,不闲扯了,开始正题. 其实,听着高大上,实现起来特别简单,因为苹果已经帮我们封装好了,我们只需要简单的调用就好了. 1.首先,我们需要导入头文件: #import <LocalAuthentication/LocalAuthentication.h> 2.

iOS开发中指纹识别简单介绍

中指纹识别简单介绍,在iphone系列中,是从5S以后开始有了指纹识别的功能,在ios8的时候开放的指纹验证的接口. 所以我们在进行指纹识别应用的时候要去判断机型以及系统的版本. 代码如下,下面需要特别注意的其实就是LAPolicyDeviceOwnerAuthentication和LAPolicyDeviceOwnerAuthenticationWithBiometrics的区别,以及检测系统的版本通过[UIDevice currentDevice].systemVersion.floatVa

ios开发-指纹识别

最近我们使用支付宝怎么软件的时候,发现可以使用指纹了,看起来是否的高大上.当时苹果推出了相关接口,让程序写起来很简单哈. 在iPhone5s的时候,苹果推出了指纹解锁.但是在ios8.0的时候苹果才推出相关的接口 所有我们需要判断硬件设备和ios系统版本是否支持 下面的例子是,先提示指纹识别,如果不支持或者主动取消,则需要手动输入密码认证 所以我们第一步需要判定系统版本,如果不支持,我们直接返回,即可 1 if ([UIDevice currentDevice].systemVersion.fl

指纹识别用法

{ 指纹识别功能是 iphone 5S之后推出的.SDK是 iOS 8.0 推出! 推出指纹识别功能的目的,是为了简化移动支付环节,占领移动支付市场. 使用步骤: { 1> 导入框架; #import <LocalAuthentication/LocalAuthentication.h> 2> 指纹识别的实现: { 1. 需要判断手机系统版本是否是 iOS 8.0 以上的版本.只有 iOS 8.0 以上才支持. // 获得当前系统版本号 float version = [UIDev

iOS 指纹识别

今天做项目用到指纹识别,但是单指纹识别技术实现起来并不复杂,但是验证成功之后需要刷新UI这里我就跳进了一个坑了??????.因为指纹验证也是在子线程进行的 要么是等待很长时间,要么就是报乱七八糟的错误,看的我也是醉了 #import "ViewController.h" //本地验证框架,用于指纹识别(iOS8出现) #import <LocalAuthentication/LocalAuthentication.h> @interface ViewController (

iOS指纹识别

1 -(void)CreateFingerPrint{ 2 LAContext *myContext = [[LAContext alloc] init]; 3 NSError *authError = nil; 4 NSString *myLocalizedReasonString = @"请验证已有指纹"; 5 6 // 判断设备是否支持指纹识别 7 if ([myContext canEvaluatePolicy:LAPolicyDeviceOwnerAuthentication