深入了解Android Fingerprint API authenticate()

时间:2016-06-14 06:46:41

标签: android encryption handler fingerprint

我在Android FingerPrint原生API上工作了几天,有两件事我很困惑。文档中有示例,但没有解释为什么我们需要以这种方式工作,所以请问,这里有安全大师吗?

我希望深入理解API的authenticate()功能,或者更具体地了解它所采用的两个参数:CryptoObjectHandler。它正在工作" 完美"在将null传递给这两个参数时,在我的POV中。所以实际上有两个问题: 为什么我们需要在调用身份验证时使用CryptoObject和/或Handler(在什么情况下我们要编码并使用不是主处理程序)?也许有些例子(甚至不是代码 - 但是用例)。提前致谢。喜欢这个网站。

1 个答案:

答案 0 :(得分:2)

CryptoObject 可让您对数据进行签名。签名数据的密钥存储在设备上的安全硬件(安全元素)上。数据由此安全元素签署。安全元素只能在识别指纹时对数据进行签名。密钥永远不会出现在Secure Element之外。 请阅读此http://android-developers.blogspot.fr/2015/10/new-in-android-samples-authenticating.html

如果您只想验证用户CrytoObject是不必要的。如果要使用存储在安全存储中的密钥(硬件中的安全元素)加密或解密数据,则可以使用CryptoObject。只有在身份验证后,此安全密钥才可用于加密或解密数据。

处理程序您可以选择提供Handler。如果提供,FingerprintManager将使用此Handler中的Looper作为其内部MyHandler实例。

private void useHandler(Handler handler) { 
    if (handler != null) { 
        mHandler = new MyHandler(handler.getLooper()); 
    } else if  (mHandler.getLooper() != mContext.getMainLooper()) { 
        mHandler = new MyHandler(mContext.getMainLooper()); 
    } 
}

提供looper允许我们定义要运行的线程并监听消息记录。

Looper looper = Looper.getMainLooper(); 
looper.setMessageLogging(new Printer() { 
    @Override 
    public void println(String x) { 
        Log.d(TAG, x); 
    } 
}); 
mFingerprintManager.authenticate(cryptoObject, mCancellationSignal, 0, this, new Handler(looper)); 

请阅读此https://www.captechconsulting.com/blogs/introducing-androids-fingerprint-api