使用AndroidKeyStore身份验证的无限循环

2024-06-19

当我使用需要用户身份验证才能使用密钥的 AndroidKeyStore 时,我的应用程序进入无限循环

.setUserAuthenticationRequired(true);
.setUserAuthenticationValidityDurationSeconds(60);

假设使用用户私钥的操作需要设备已解锁,否则UserNotAuthenticatedException被生成。应用程序必须显示设备身份验证屏幕,并且密钥的下次使用才会起作用。

但是,就我而言总是被抛出UserNotAuthenticatedException强制应用程序显示解锁屏幕。它仅发生在某些设备中。我有两台运行 Android 6.0.1 的 Nexus 5,只有其中一台出现故障。

这是活动的主要代码

KeyPair keyPair;

private void attemptRegisterKey(){
    try{
        //generate key pair using AndroidKeyStore only once.
        if (keyPair != null)
            generateKeyPair(alias);

        //Sample Signature
        Signature sig = Signature.getInstance("SHA256withRSA");
        sig.initSign(keyPair.getPrivate());
        sig.update("hello".getBytes());
        byte signature[] = sig.sign();

    }catch  (UserNotAuthenticatedException e){
        //show Authentication Screen
        Intent intent = mKeyguardManager.createConfirmDeviceCredentialIntent(null, null);
        startActivityForResult(intent, REQUEST_CODE_CONFIRM_DEVICE_CREDENTIALS);
    }
}

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == REQUEST_CODE_CONFIRM_DEVICE_CREDENTIALS) {
        // Challenge completed, proceed
        if (resultCode == RESULT_OK) {
            attemptRegisterKey();
        } else {
            //Process error
        }
    }
}

以及生成密钥的代码

public KeyPair generateKeyPair(String alias) throws Exception {

    KeyStore keyStore = KeyStore.getInstance("AndroidKeyStore");
    keyStore.load(null);

    KeyPairGenerator kpg = KeyPairGenerator.getInstance(
        KeyProperties.KEY_ALGORITHM_RSA, "AndroidKeyStore");


    KeyGenParameterSpec.Builder builder =  new KeyGenParameterSpec.Builder(
        alias,
        KeyProperties.PURPOSE_SIGN | KeyProperties.PURPOSE_VERIFY)
            .setDigests(KeyProperties.DIGEST_SHA256, KeyProperties.DIGEST_SHA512)
            .setSignaturePaddings(KeyProperties.SIGNATURE_PADDING_RSA_PKCS1)
            .setUserAuthenticationRequired(true);
            .setUserAuthenticationValidityDurationSeconds(60);


    kpg.initialize(builder.build());

            KeyPair kp = kpg.generateKeyPair();
    return kp;
}

None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用AndroidKeyStore身份验证的无限循环 的相关文章

  • 接下来查看 id 作为 android 中的自定义属性

    对于我的自定义视图 我还定义了一个自定义属性来保留视图的 id 其格式为 参考 在layout xml中它的定义如下 非常类似于android layout below attr
  • 如何在Eclipse调试器中查看崩溃原因

    按照这个 Android 教程 http developer android com resources tutorials hello world html http developer android com resources tut
  • Intent.putExtra列表[重复]

    这个问题在这里已经有答案了 可能的重复 如何将列表放入意图中 https stackoverflow com questions 6541088 how to put a list in intent 我想通过一个List从一项活动转移到另
  • Android 使用键盘上的“完成”按钮来单击按钮

    好的 在我的应用程序中 我有一个供用户输入数字的字段 我已将该字段设置为仅接受数字 当用户单击该字段时 它会弹出键盘 键盘 ICS 上 上有一个完成按钮 我希望键盘上的完成按钮能够触发我的应用程序中的提交按钮 我的代码如下 package
  • Android 和 Java Uuid

    我想为我的应用程序生成一个uuid 我尝试了很多东西 例如wifi mac地址 获取android id 序列号 从设备创建伪uuidandroid os Build特性 我还知道java本身有Uuid创建者类java util UUID
  • 在android中添加音频到视频

    我想开发一个可以录制视频 mp4 的android应用程序 然后我的资源文件夹中有一些音频文件 mp3 我想将其添加到视频的末尾 所以最终的效果就像首先播放视频 在视频结束时会听到添加的音频 我该怎么做 合并具有不同音频编解码器的文件并不容
  • Android 上有某种 ASLR 保护吗?

    我想知道是否有人可以访问具有从程序的一个实例到另一个实例的函数地址相同的库 在同一设备上运行时 地址空间布局将非常一致 许多主要系统库都是由 zygote 预加载的 因此由它分叉出来的子级继承为共享映射 以区分为应用程序 我认为在虚拟内存级
  • Android SQLite 查询被 Android Studio 标记为错误

    在我的一个 Android 应用程序中 我使用了一些SQLite自从我更新到以来开始出现问题的查询Android Studio 3 0 尽管我可以编译并运行该应用程序 但它们被标记为错误 这些是查询 db execSQL INSERT IN
  • Google App Engine 的示例 Android 应用程序,抛出异常

    我的 GAE 示例 Android 应用程序直到昨天都工作正常 除了在 Consts java 中添加了我的项目 ID 之外 我没有对客户端应用程序进行任何更改 现在每次我尝试插入 我的意思是发送消息 时都会抛出以下异常 06 06 09
  • W/Firestore:[CustomClassMapper]:Android 类没有设置器/字段

    我试图使用 Recyclerview 从 Documents 类加载数据 但 logcat 上出现错误 W Firestore 21 1 1 CustomClassMapper No setter field for Document Na
  • Android 开发工具无法通过 adb 识别 Asus Nexus 7

    问题 正确安装和连接后 adb 无法识别 Asus Nexus 7 设置 华硕 Nexus 7 平板电脑 Windows 7 64 位操作系统 采取的步骤 安装64位Java JDK http www oracle com technetw
  • Android 应用程序中最用户友好的布局选项

    所以我面临的问题不是主观判断什么对用户最好 我认为 而是有哪些选项可以用来说明定位 Think of some sort of team sports app where you can put little dots for player
  • 发布 apk 中的“来源不明”

    我的调试 APK 中的所有内容都运行良好 但是 当我导出 APK 并安装它时 一切正常 直到我调用引用的库 E AndroidRuntime 32571 at com znood znoodapp ShowResultsActivity a
  • 如何将 csv/文本文件从 Android 手机发送到 WiFi 打印机?

    我正在开发一个 Android 应用程序 我应该从数据库中获取 csv txt 文件格式的数据 然后我必须将文件发送到 wifi 打印机 有谁知道我如何开始这样做 答案终于很简单 Socket client new Socket IP PO
  • 如何将相机居中以使标记位于屏幕底部? (谷歌地图API V2 Android)

    单击标记时 相机的默认行为是将其置于屏幕中央 但由于我通常在信息窗口中有很长的文本描述 因此实际更改相机位置以使标记位于屏幕的底部会更方便 屏幕 使信息窗口位于屏幕中央 我认为我应该能够通过重写 onMarkerClick 函数来做到这一点
  • Android Path addArc 在canvas中两点之间

    我正在尝试在 android 中绘制弧线 在IOS中 用这个方法确实很简单 path addArcWithCenter radius startAngle endAngle clockwise 在android中 我有3个点 我的圆的中心
  • 如何暂时禁用Android按钮[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我想暂时禁
  • 将 cookie 存储在共享首选项中

    我一直在绞尽脑汁地试图弄清楚这一点 我正在制作一个 HttpsURLConnection 并使用 java net cookiemanager 来管理我的 cookie 据我所知 无法使用 android webkit cookiemana
  • admob 连接被拒绝

    我刚刚开始将 admob 添加到我的 Android 应用程序中 并开始使用 admob 网站上提供的横幅必需品示例 这是示例代码 public class BannerEssentials extends Activity Overrid
  • 刷新 ArrayAdapter onResume [notifyDataSetChanged() 不起作用]

    我正在使用片段创建一个联系人列表应用程序 其中一个片段是联系人列表中的姓名列表 另一个是其余详细信息 这是显示名称列表的类 public class MyListFragment extends ListFragment private C

随机推荐