欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

java获取手机已安装APK的签名摘要

程序员文章站 2024-03-09 11:13:29
将apk发布到应用商店或接入第三方的sdk时,有时需要提供apk的签名摘要信息,可以通过摘要算法md5或sha-1来获取签名的摘要,除了获取自己的apk签名,也可以获取手机...

将apk发布到应用商店或接入第三方的sdk时,有时需要提供apk的签名摘要信息,可以通过摘要算法md5或sha-1来获取签名的摘要,除了获取自己的apk签名,也可以获取手机上其他已安装的apk签名,只需要传入其他apk的包名即可。

private static final char[] hex_char = {
 
  '0', '1', '2', '3', '4', '5', '6', '7',
 
  '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'
 
};
 
/** 获取签名的md5摘要 */
 
public string[] signaturedigest() {
 
  pkginfo = mcontext.getpackagemanager().getpackageinfo(
 
        mcontext.getpackagename(), packagemanager.get_signatures);
 
  int length = pkginfo.signatures.length;
 
  string[] digests = new string[length];
 
  for (int i = 0; i < length; ++i) {
 
    signature sign = mpkginfo.signatures[i];
 
    try {
 
      messagedigest md5 = messagedigest.getinstance("md5");
 
      byte[] digest = md5.digest(sign.tobytearray()); // get digest with md5 algorithm
 
      digests[i] = tohexstring(digest);
 
    } catch (nosuchalgorithmexception e) {
 
      e.printstacktrace();
 
      digests[i] = null;
 
    }
 
  }
 
  return digests;
 
}
 
/** 将字节数组转化为对应的十六进制字符串 */
 
private string tohexstring(byte[] rawbytearray) {
 
  char[] chars = new char[rawbytearray.length * 2];
 
  for (int i = 0; i < rawbytearray.length; ++i) {
 
    byte b = rawbytearray[i];
 
    chars[i*2] = hex_char[(b >>> 4 & 0x0f)];
 
    chars[i*2+1] = hex_char[(b & 0x0f)];
 
  }
 
  return new string(chars);
 
}

以上就是本文的全部内容,希望对大家的学习有所帮助。