Android 中 KeyStore getKey() 返回 null

2024-02-13

我使用此代码将密钥存储到 Android 应用程序的 KeyStore 中:

SecretKeyFactory kf = SecretKeyFactory.getInstance("DES");
DESKeySpec keySpec = new DESKeySpec(key); // byte[] key
SecretKey skey = kf.generateSecret(keySpec);

KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
ks.load(null, "ksPassword".toCharArray());

PasswordProtection pass = new PasswordProtection(
        "entryPassword".toCharArray());
KeyStore.SecretKeyEntry skEntry = new KeyStore.SecretKeyEntry(skey);
ks.setEntry("keyAlias", skEntry, pass);

FileOutputStream fos = ctx.getApplicationContext().openFileOutput("bs.keystore",
        Context.MODE_PRIVATE);
ks.store(fos, ksPassword);
fos.close();

然后,在另一种方法中,我使用此代码来检索我存储的密钥,

FileInputStream fis = ctx.getApplicationContext().openFileInput("bs.keystore");
KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
ks.load(fis, "ksPassword".toCharArray());
Key k = (SecretKey) ks.getKey(keyAlias, "entryPassword".toCharArray());
fis.close();

但指令ks.getKey("keyAlias", "entryPassword".toCharArray())返回空值。

我哪里错了?


好吧,我终于明白问题所在了……

我使用该方法在密钥库中存储了多个密钥。使用代码ks.load(null, "ksPassword".toCharArray());每次都会删除前一个密钥(因为加载空密钥库),并且只有最后一个密钥存储在密钥库中。

所以正确的代码是:

KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
try {
FileInputStream fis = ctx.getApplicationContext().openFileInput("bs.keystore");
ks.load(fis, ksPassword);
} catch(FileNotFoundException e) {
    ks.load(null, ksPassword);
}

该方法第一次执行该文件bs.keystore不存在,所以代码中catch块被执行。相反,在接下来的调用中,文件存在并且新密钥被添加到密钥库中。

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

Android 中 KeyStore getKey() 返回 null 的相关文章

随机推荐

  • 将 admin date_hierarchy 设置为foreignkey日期字段

    当我尝试设置时 date hierarchy schedule date 其中 Schedule 是外键 我收到以下错误 TestAdmin date hierarchy refers to field schedule date that
  • 使用 Express 后端将 create-react-app 部署到 heroku 在浏览器中返回无效的主机标头

    标题说明了一切 我在这里构建了一个最小的工作示例 https github com sehailey proxytest https github com sehailey proxytest 我已经尝试过 所以我可能已经记不清了 尽管它们
  • 在 sed -i (正则表达式?)bash 内部使用变量

    我看过另一个sed这里的页面 我找不到使用的页面 i在正则表达式搜索部分有一个变量 我正在尝试剪切文件中请求的行myresolv conf并获取其行号 我班5个人都卡住了 任何帮助都很棒 line grep n 3 myresolv con
  • std::u16string、std::u32string、std::string、length()、size()、代码点和字符

    我很高兴看到std u16string and std u32string在 C 11 中 但我想知道为什么没有std u8string处理 UTF 8 情况 我的印象是std string是为UTF 8设计的 但似乎做得不太好 我的意思是
  • VSTO Outlook:获取选定的附件

    我正在尝试对 Outlook 2010 中选定的附件执行操作 我在VS2012中创建了一个Outlook VSTO项目 这是用于在附件功能区上添加按钮的 XML
  • 如何在 WPF 应用程序中动态导入 3D 模型

    我已经搜索了很长一段时间但找不到合适的方法 当用户选择模型时 如何在运行时将 3D 模型导入 WPF 应用程序中 它可以在任何一种流行的 3D 建模软件中构建 例如 3DS max Maya Blender 等 但并非全部 需要导入 3DS
  • Java作业-打印三角形图案?

    我正在为一项任务而苦苦挣扎 我知道这完全是我的错 但我在课堂上落后了 而且在完成这项作业时遇到了困难 我的目标是打印以下图案 使用 嵌套 for 循环 有人能给我一些关于如何解决这个问题的提示吗 我已经成功打印了一个方形的星号 但我无法弄清
  • 在 Chrome 上单击时链接不会获得焦点

    我在 Chrome 上遇到了一个非常奇怪的行为 这对我来说似乎是一个错误 当您单击链接时 该链接没有获得焦点 更糟糕的是 身体反而成为焦点 可以在这里观察到这种行为 http jsfiddle net YfbR7 4 http jsfidd
  • Emacs - 取消定义前缀键

    我设法将 M 大写 em 键定义为 sqlplus 模式下的前缀键 这阻止了我输入 M 如何在此模式下取消设置此前缀键 短期修复 M x local set key M self insert command 长期修复 请在 emacs 文
  • Boost 程序选项 bool 始终为 True

    通过程序选项 我正在检查参数的有效组合 但由于某种原因 gpu 参数是一个布尔值 无论我是否在命令行上将其设置为 false 它始终为 true 如果我在命令行上指定 gpu 选项 有没有办法可以为 false 我希望能够创建一个布尔变量来
  • 恢复已被覆盖的内置方法

    假设我们的脚本包含在网页中 并且先前的脚本 已执行 执行了以下操作 String prototype split function return U MAD BRO So the split字符串方法已被覆盖 我们想使用这个方法 所以我们需
  • 如何将 CupertinoApp 包装在 Localizations 小部件中,以便我可以在其中使用 Material 小部件?

    我正在使用 CupertinoApp 小部件来包装我的应用程序 同时尝试在其中使用 Material TextFormField 小部件 例如 当我触发文本选择模式 双击文本字段 时 我收到以下错误 因为它尝试打开需要材质本地化的覆盖小部件
  • 来自其他容器的 Docker mongo 映像“连接被拒绝”

    我是码头工人的新手 我正在尝试创建一个 MongoDB 容器和一个 NodeJS 容器 我的文件看起来 version 2 services backend image node 5 11 onbuild ports 3001 3001 v
  • 代码沙箱内的路由,由于 withRouter 而失败

    当我点击提交按钮时 我需要重定向到此页面 pageOne 所以我用谷歌搜索并找到了一个反应路由器并使用了这一行this props history push anotherPage 但它没有重定向 它抛出一个错误 Invariant fai
  • 如何防止 root 访问我的 docker 容器

    我正在努力强化我们的 docker 镜像 但我对它的理解已经有点薄弱了 话虽如此 我当前要做的步骤是阻止用户以 root 身份运行容器 对我来说 这意味着 当用户运行 docker exec it my container bash 时 他
  • 在 laravel 中设置 phpChart

    环境 亚马逊EC2 Ubuntu x64 已安装GD库 我最近在 laravel 框架中使用 phpChart 进行图表和报告 我被困在开始阶段 这就是我所做的 1 将phpChart Lite中的内容解压到 var www app lib
  • 存储库中的分支是什么?

    根据我对 subversion 的理解 如果您有一个包含多个项目的存储库 那么您可以在该存储库中分支各个项目 请参阅SVN红皮书 使用分支 http svnbook red bean com en 1 1 ch04s02 html 然而 我
  • C++ 错误 C2653“类”不是类或命名空间名称

    下午好 我已经开始学习 C 并且在编译我的项目时遇到问题 如果您发现一些错误代码 如果您告诉我 我会很高兴 我有以下定义 Utils h include stdafx h include
  • 在 emacs org-mode 中导出时如何评估所有代码块

    I have an org mode document with many different R source code blocks Whenever I hit C c C e and export to PDF or HTML I
  • Android 中 KeyStore getKey() 返回 null

    我使用此代码将密钥存储到 Android 应用程序的 KeyStore 中 SecretKeyFactory kf SecretKeyFactory getInstance DES DESKeySpec keySpec new DESKey