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

N S*_*rma 8 security hash android keystore android-keystore

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

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

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

提前致谢.

小智 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) {
}
Run Code Online (Sandbox Code Playgroud)


小智 5

尝试这个?

/**
 * 
 * @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();
}
Run Code Online (Sandbox Code Playgroud)


Seb*_*ano 4

  1. 通过调用查找应用程序 APK 文件的路径Context.getPackageCodePath()
  2. 将该 APK 复制到您选择的可写目录
  3. 使用apk-parser从 APK 中获取您需要的信息(参见下面的示例)

该库能够解压缩 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();
}
Run Code Online (Sandbox Code Playgroud)