如何在Android中以编程方式读取SHA和MD5指纹

时间:2015-01-31 11:34:46

标签: android security hash keystore android-keystore

您好我想以编程方式从我的应用程序中读取密钥库的SHA和MD5指纹值。

我会将SHA或MD5值作为安全密钥。我将在代码中使用此密钥来加密某些内容并在服务器端对其进行解密。

有没有办法找到这个或有没有办法使用不同的好方法做同样的事情。这应该是没有其他人可以找到这个密钥的方式。

提前致谢。

4 个答案:

答案 0 :(得分:7)

PackageInfo info;
try {

    info = getPackageManager().getPackageInfo(
        "com.your.package.name", PackageManager.GET_SIGNATURES);

    for (Signature signature : info.signatures) {
        MessageDigest md;
        md = MessageDigest.getInstance("SHA");
        md.update(signature.toByteArray());
        String hash_key = new String(Base64.encode(md.digest(), 0));
    }

} catch (NameNotFoundException e1) {
} catch (NoSuchAlgorithmException e) {
} catch (Exception e) {
}

答案 1 :(得分:3)

  1. 通过致电Context.getPackageCodePath()
  2. 查找应用程序APK文件的路径
  3. 将该APK复制到您选择的可写目录
  4. 使用apk-parser从APK获取所需信息(请参阅下面的示例)
  5. 该库能够解压缩APK文件并解析其所有内容。从apk-parser的Github页面中提取的一个示例,根据您的需求量身定制:

    try {
      ApkParser apkParser = new ApkParser(new File(filePath));
      ApkSignStatus signStatus = apkParser.verifyApk(); // not needed
      List<CertificateMeta> certs = apkParser.getCertificateMetas();
      for (CertificateMeta certificateMeta : certs) {
        System.out.println(certificateMeta.getCertMd5());
      }
    } catch (Exception e) {
      e.printStackTrace();
    }
    

答案 2 :(得分:2)

试试这个:

/**
 * 
 * @param pkg packageName
 * @return
 */
public String getSingInfo (String pkg) {
    try {
        PackageInfo packageInfo = getPackageManager().getPackageInfo(pkg, PackageManager.GET_SIGNATURES);
        Signature[] signs = packageInfo.signatures;
        Signature sign = signs[0];
        String s = getMd5(sign);
        return "md5:" + s ;
    } catch (Exception e) {
        e.printStackTrace();
    }

    return "";
}



private String getMd5 (Signature signature) {
    return encryptionMD5(signature.toByteArray());
}

public static String encryptionMD5(byte[] byteStr) {
    MessageDigest messageDigest = null;
    StringBuffer md5StrBuff = new StringBuffer();
    try {
        messageDigest = MessageDigest.getInstance("MD5");
        messageDigest.reset();
        messageDigest.update(byteStr);
        byte[] byteArray = messageDigest.digest();
        for (int i = 0; i < byteArray.length; i++) {
            if (Integer.toHexString(0xFF & byteArray[i]).length() == 1) {
                md5StrBuff.append("0").append(Integer.toHexString(0xFF & byteArray[i]));
            } else {
                md5StrBuff.append(Integer.toHexString(0xFF & byteArray[i]));
            }
        }
    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
    }
    return md5StrBuff.toString();
}

答案 3 :(得分:-1)

最简单的方法

  1. 打开Android Studio
  2. 打开您的项目
  3. 单击Gradle(从右侧面板,您将看到Gradle Bar)
  4. 点击刷新(点击从Gradle Bar刷新,您将看到项目的List Gradle脚本)
  5. 单击您的项目(您的项目名称表单列表(根))
  6. 点击任务
  7. 点击android
  8. 双击signedReport(您将在运行栏中获得SHA1和MD5)
  9. 检查以下屏幕截图:

    enter image description here