首页 > 移动开发 > ANDROID > 破译《碟中谍》经典画面,解密指纹验证+刷脸!
科幻电影一直是人们津津乐道的话题,其中不乏一些经典场面,让观众为之震惊赞叹,例如《钢铁侠》中的悬浮虚拟触摸屏、《碟中谍》中的指纹虹膜识别等。
如今,这些看似高大上的科技也走进了我们的日常生活,像指纹与面容识别,其应用已经极为普遍与广泛。
当今社会对个人隐私的保护越来越重视,对App的安全性也提出了更高的要求,具备私密性与独特性的指纹与面容识别,就成为了强有力的保障。
当用户在解锁设备、支付、文件访问时,利用指纹或者面容认证,这在很大程度上减少了帐号盗取、信息泄露的风险。
HMS的
FIDO
提供了相关功能:开放基于
WebAuthn
标准的FIDO2客户端能力,提供本地指纹、面容认证开放能力,为应用提供安全可信的本地生物特征认证和安全便捷的线上快速身份验证能力。
Java代码
implementation 'com.huawei.hms:fido-bioauthn-androidx:5.2.0.301'
Java代码
implementation 'com.huawei.hms:fido-bioauthn:5.2.0.301'
请保证手机没有root过,不然无法使用指纹和面容能力
测试前请先保证手机中已经有相应的指纹和面容信息,否则会报相关的错误码。
BioAuthnPrompt bioAuthnPrompt = new BioAuthnPrompt(this, ContextCompat.getMainExecutor(this), new BioAuthnCallback() {
@Override
public void onAuthError(int errMsgId, CharSequence errString) {
showResult("指纹认证报错. errorCode=" + errMsgId + ",errorMessage=" + errString);
}
@Override
public void onAuthSucceeded(BioAuthnResult result) {
showResult("指纹认证成功. CryptoObject=" + result.getCryptoObject());
}
@Override
public void onAuthFailed() {
showResult("指纹认证失败.");
}
});
2、创建提示信息,并进行认证。
// 自定义设置信息
BioAuthnPrompt.PromptInfo.Builder builder =
new BioAuthnPrompt.PromptInfo.Builder().setTitle("主标题")
.setSubtitle("副标题")
.setDescription("内容描述");
//允许使用其他认证方式
builder.setDeviceCredentialAllowed(true);
BioAuthnPrompt.PromptInfo info = builder.build();
//进行认证
bioAuthnPrompt.auth(info);

int permissionCheck = ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CAMERA);
if (permissionCheck != PackageManager.PERMISSION_GRANTED) {
showResult("请先申请相机权限");
ActivityCompat.requestPermissions(MainActivity.this, new String[] {Manifest.permission.CAMERA}, 1);
return;
}
2、检查当前设备是否支持人脸识别
FaceManager faceManager = new FaceManager(this);
int errorCode = faceManager.canAuth();
if (errorCode != 0) {
resultTextView.setText("");
showResult("不支持人脸识别. errorCode=" + errorCode);
return;
}
3、进行人脸认证
int flags = 0;
Handler handler = null;
CryptoObject crypto = null;
faceManager.auth(crypto, cancellationSignal, flags, new BioAuthnCallback() {
@Override
public void onAuthError(int errMsgId, CharSequence errString) {
showResult("认证报错. errorCode=" + errMsgId + ",errorMessage=" + errString
+ (errMsgId == 1012 ? " 没有相机权限." : ""));
}
@Override
public void onAuthHelp(int helpMsgId, CharSequence helpString) {
showResult("返回识别过程中提示信息. helpMsgId=" + helpMsgId + ",helpString=" + helpString + "\n");
}
@Override
public void onAuthSucceeded(BioAuthnResult result) {
showResult("认证成功. CryptoObject=" + result.getCryptoObject());
}
@Override
public void onAuthFailed() {
showResult("认证失败.");
}
}, handler);
这样人脸识别的代码就完成了,调用后就会进行人脸认证。
需要注意的是人脸认证没有默认的UI页面,需要我们自己去设计配置。
具体的人脸识别的代码实现可以是下面这样的:
faceManager.auth(crypto, cancellationSignal, flags, new BioAuthnCallback() {
@Override
public void onAuthError(int errMsgId, CharSequence errString) {
if(isFingerprintSuccess){//指纹认证成功但面容识别失败
//展示假文件
showFakeFile();
}
}
@Override
public void onAuthHelp(int helpMsgId, CharSequence helpString) {
}
@Override
public void onAuthSucceeded(BioAuthnResult result) {
if(isFingerprintSuccess){//指纹认证成功
//展示真文件
showRealFile();
}else {//指纹认证失败
//展示假文件
showFakeFile();
}
}
@Override
public void onAuthFailed() {
if(isFingerprintSuccess){//指纹认证成功但面容识别失败
//展示假文件
showFakeFile();
}
}
}, handler);
原文链接: https://developer.huawei.com/consumer/cn/forum/topic/0202568919166990775?fid=18
原作者:胡椒
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69970551/viewspace-2780059/ ,如需转载,请注明出处,否则将追究法律责任。