我在Android FingerPrint原生API上工作了几天,有两件事我很困惑。文档中有示例,但没有解释为什么我们需要以这种方式工作,所以请问,这里有安全大师吗?
我希望深入理解API的authenticate()
功能,或者更具体地了解它所采用的两个参数:CryptoObject
和Handler
。它正在工作" 完美"在将null
传递给这两个参数时,在我的POV中。所以实际上有两个问题:
为什么我们需要在调用身份验证时使用CryptoObject和/或Handler(在什么情况下我们要编码并使用不是主处理程序)?也许有些例子(甚至不是代码 - 但是用例)。提前致谢。喜欢这个网站。
答案 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