• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > Android 指纹认证,android指纹认证

Android 指纹认证,android指纹认证

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了android 指纹解锁,android 指纹,android 指纹开发,android 指纹登录,android 指纹识别开发等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

Android 指纹认证,android指纹认证


安卓指纹认证使用智能手机触摸传感器对用户进行身份验证。Android Marshmallow(棉花糖)提供了一套API,使用户很容易使用触摸传感器。在Android Marshmallow之前访问触摸传感器的方法不是标准的。

本文地址:http://wuyudong.com/2016/12/15/3146.html,转载请注明出处。

使用安卓指纹认证有几个好处:

1、更快更容易使用

2、安全:指纹可以识别你的身份唯一

3、在线交易更加的容易

在使用android指纹识别之前你必须遵循一些步骤,可能看起来真的很复杂,但本文将教你你一步一步实现。

结果就像下图显示的那样:

开始 Android 指纹认证

就如上面所说,指纹认证过程有以下几个步骤:

  • 验证锁屏是否是安全的,或者换句话说,它是用密码或模式保护的
  • 确认在智能手机上已经有一个指纹是注册的
  • 访问 Android keystore 存储将对象加密/解密的密钥
  • 生成一个加密密钥和密码
  • 启动认证过程
  • 实现一个回调类来处理身份认证事件

就是这些了,下面来实现上面的步骤!

在开始的时候,先得开启触摸传感器与身份认证的权限,在清单文件 Manifest.xml 中添加:

<uses-permission android:name="android.permission.USE_FINGERPRINT" />

现在是时候创建main activity 类来处理所有的认证步骤了.

验证Android安全锁屏

第一步是确认锁屏是否是安全的,这个可以使用 KeyguardManager 和FingerprintManager 来解决。 我们可以通过使用 getSystemService 类获取它们的实例:

// Keyguard Manager
KeyguardManager keyguardManager = (KeyguardManager)
                  getSystemService(KEYGUARD_SERVICE);

// Fingerprint Manager
fingerprintManager = (FingerprintManager) 
                 getSystemService(FINGERPRINT_SERVICE);

现在,我们的认证应用可以检查是否所有的安全判断都满足:

private boolean checkFinger() {

  // Keyguard Manager
  KeyguardManager keyguardManager = (KeyguardManager)
           getSystemService(KEYGUARD_SERVICE);

  // Fingerprint Manager
  fingerprintManager = (FingerprintManager) 
         getSystemService(FINGERPRINT_SERVICE);

  try {
   // Check if the fingerprint sensor is present
   if (!fingerprintManager.isHardwareDetected()) {
     // Update the UI with a message
     message.setText("Fingerprint authentication not supported");
     return false;
   }

   if (!fingerprintManager.hasEnrolledFingerprints()) {
     message.setText("No fingerprint configured.");
     return false;
   }

   if (!keyguardManager.isKeyguardSecure()) {
     message.setText("Secure lock screen not enabled");
     return false;
   }
 }
 catch(SecurityException se) {
   se.printStackTrace();
 }
 return true;
}

注意到应用程序验证了至少有一个指纹已经注册否则认证过程将不会开始,下面的图片展示了如果没有发现注册指纹提示一个错误信息

如果一切就绪,一切判断情况都满足,认证应用产生密钥并访问Android store.

访问Android keystore并生成密钥

接下来的步骤就是访问Android keystore 并产生密钥来加密数据,应用程序在一个叫 generateKey() 的方法中单独完成.

// Get the reference to the key store
keyStore = KeyStore.getInstance("AndroidKeyStore");

接着必须获得密钥生成器的引用:

// Key generator to generate the key
keyGenerator = KeyGenerator.getInstance(KeyProperties.KEY_ALGORITHM_AES, 
                 "AndroidKeyStore");

最后,我们必须初始化密钥生成器:

keyGenerator.init( new
  KeyGenParameterSpec.Builder(KEY_NAME,
  KeyProperties.PURPOSE_ENCRYPT |
  KeyProperties.PURPOSE_DECRYPT)
  .setBlockModes(KeyProperties.BLOCK_MODE_CBC)
  .setUserAuthenticationRequired(true)
  .setEncryptionPaddings(
    KeyProperties.ENCRYPTION_PADDING_PKCS7)
  .build());

 keyGenerator.generateKey();

注意到我们特别指出密钥的使用: 加密和解密并且认证需要使用密钥,最后应用程序生成了密钥 (最后一行).

上面的代码完整的方法如下:

private void generateKey() throws FingerprintException {
  try {
    // Get the reference to the key store
    keyStore = KeyStore.getInstance("AndroidKeyStore");

    // Key generator to generate the key
    keyGenerator = KeyGenerator.getInstance(KeyProperties.KEY_ALGORITHM_AES,

      "AndroidKeyStore");

     keyStore.load(null);
     keyGenerator.init( new
       KeyGenParameterSpec.Builder(KEY_NAME,
      KeyProperties.PURPOSE_ENCRYPT |
      KeyProperties.PURPOSE_DECRYPT)
     .setBlockModes(KeyProperties.BLOCK_MODE_CBC)
     .setUserAuthenticationRequired(true)
     .setEncryptionPaddings(
        KeyProperties.ENCRYPTION_PADDING_PKCS7)
    .build());

    keyGenerator.generateKey();
  }
  catch(KeyStoreException
   | NoSuchAlgorithmException
   | NoSuchProviderException
   | InvalidAlgorithmParameterException
   | CertificateException
   | IOException exc) {
    exc.printStackTrace();
    throw new FingerprintException(exc);
 }
}

创建Android Cipher

一旦密钥准备好了,最后步骤就是使用之前生成的密钥来创建Android Cipher ,代码很简单:

private Cipher generateCipher() throws FingerprintException {
  try {
    Cipher cipher = Cipher.getInstance(KeyProperties.KEY_ALGORITHM_AES + "/"
     + KeyProperties.BLOCK_MODE_CBC + "/"
     + KeyProperties.ENCRYPTION_PADDING_PKCS7);
     SecretKey key = (SecretKey) keyStore.getKey(KEY_NAME,
             null);
     cipher.init(Cipher.ENCRYPT_MODE, key);
     return cipher;
  }
  catch (NoSuchAlgorithmException
     | NoSuchPaddingException
     | InvalidKeyException
     | UnrecoverableKeyException
     | KeyStoreException exc) {
      exc.printStackTrace();
      throw new FingerprintException(exc);
  }
}

构建 Android 指纹认证 app

是时候将前面的方法组合起来创建我们的 Android 指纹识别app,这个app很简单只有一个 MainClass 调用上面所示的方法开始认证处理.

@Override
protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);

  message = (TextView) findViewById(R.id.fingerStatus);
  Button btn = (Button) findViewById(R.id.authBtn);

  final FingerprintHandler fph = new FingerprintHandler(message);

  if (!checkFinger()) {
    btn.setEnabled(false);
  }
  else {
    // We are ready to set up the cipher and the key
   try {
     generateKey();
     Cipher cipher = generateCipher();
     cryptoObject =
      new FingerprintManager.CryptoObject(cipher);
  }
  catch(FingerprintException fpe) {
   // Handle exception
   btn.setEnabled(false);
  }
 }

 btn.setOnClickListener(new View.OnClickListener() {
   @Override
   public void onClick(View view) {
    message.setText("Swipe your finger");
    fph.doAuth(fingerprintManager, cryptoObject);
   }
  });
}

有几点需要注意的,首先,Android app 创建一个 CryptoObject 对象来处理认证过程,接着,app 一个button,当用户点击它的时候认证过程开始,当上面的初始化判断条件不满足的时候这个 button 被隐藏。需要注意的最重要的事情是新类调用FingerprintHandler. 这个类是个接收认证处理事件的回调类,此外, 此类启动认证过程的doauth方法.

Android 指纹认证回调

最后一步是创建一个回调类,这样我们可以接收事件消息并能够知道什么时候认证成功或者除了一些问题,这个类继承自 FingerprintManager.AuthenticationCallback.

public class FingerprintHandler extends FingerprintManager.AuthenticationCallback {
  priva



 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Android 指纹认证,android指纹认证

相关文章

  • 2017-05-26仿微信新消息提示音,消息
  • 2017-05-26Android 知识Tips,android知识tips
  • 2017-05-26订单流程view,订单view
  • 2017-05-226.3.1 数据存储与访问之——初见SQLite数据库
  • 2017-05-26msm8909+android5.1.1 由BLSP3改为BLSP1后SPI读写速度慢问题解决
  • 2017-05-26android:Activity四种启动模式简介
  • 2017-05-26java中random随机函数的一些理解
  • 2017-05-26ARM汇编中LDR伪指令和LDR指令
  • 2017-05-26Android--线程详解
  • 2017-05-26easy touch利用playmaker拖动ngui对象

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • Java时间间隔问题在Android中的使用,javaandroid
    • Android必知必会-使用okhttp的PUT方式上传文件
    • 绘制视图,根据轴测图绘制三视图
    • 老人桌面===花花绿绿的桌面,老人桌面
    • 自定义PopupWindow,popupwindow
    • Android Studio插件,androidstudio插件
    • php迁移遇到的问题
    • Linux内核系列—6.操作系统开发之内存分页机制,linux分页
    • 安卓下如何使用JUnit进行软件测试,安卓junit
    • 手机安全卫士——缓存清理,安全卫士缓存清理

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有