【问题标题】:How to read keystore values?如何读取密钥库值?
【发布时间】:2012-03-19 01:01:10
【问题描述】:

我有一个安卓库。我需要添加功能来检查是否只有有效用户使用这个库。为此,我需要从 android 密钥库中读取值。如何从 android 密钥库中读取值?

【问题讨论】:

  • “android 密钥库”是什么意思?证书信任库?你到底想做什么?
  • 我指的是 .keystore 文件,我们用于在上传到市场之前对 apk 文件进行签名。
  • 好的,但是你想做什么?此文件仅存在于您的开发人员工作站上,它从不包含在应用程序中。您可以从应用程序获取签名证书,但这并不能真正帮助识别“有效”用户。提供有关您的方法的更多详细信息。
  • 我有一个支持性的库文件。因此,当有人购买它时,我将为他们创建一个自定义库。他们可以在持续时间方面或在包装方面购买它。如果它的包裹明智的买家应该提到他的包裹名称。所以我可以使用 getPackageName() 方法进行验证。但如果是明智的,我需要检查申请的时间和有效性。如果我可以获得证书指纹,我可以检查其有效性。

标签: android keystore code-access-security


【解决方案1】:

您可以使用 `PacakgeInfo.signatures' 来获取应用的签名证书。通常只有一个签名,所以这应该给你证书(它持有证书,即使它被称为“签名”)。您可以将 blob 的 SHA1 等哈希值用于指纹进行比较。

PackageInfo pi = packageManager.getPackageInfo(getPackageName());
byte[] certificate = pi.signatures[0].toByteArray();
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] fingerprint = md.digest(certificate);
String hexFingerprint = toHexString(fingerprint);

当然,要使这项检查生效,您需要将指纹嵌入您的库中。请记住,反编译和替换指纹非常容易。

【讨论】:

  • 我怎样才能得到这样的证书指纹(MD5):94:1E:43:49:87:73:BB:E6:A6:88:D7:20:F1:8E:B5 :98
  • 使用MessageDigest类计算指纹。然后可能转换为十六进制字符串。查看更新的答案。
猜你喜欢
  • 1970-01-01
  • 2020-08-28
  • 1970-01-01
  • 1970-01-01
  • 2016-09-28
  • 2013-12-25
  • 1970-01-01
  • 2012-09-21
  • 2021-07-26
相关资源
最近更新 更多