通过包名获取签名信息工具及使用方法

安装工具

点击下载签名获取工具,下载GetSign.apk,并安装到手机上。

安装要获取信息的apk

安装要获取签名信息的apk

运行工具

运行界面如下:

输入包名,包名可通过第三方应用粘贴,也可自己输入。这里的包名必须是已经安装在手机中的apk的包名,否则会获取失败。若不知包名怎么获取可参考后文中的“获取包名”。


输入包名之后点击获取,即可获取到相应的信息。

获取到之后,可以点击对应的“复制”按钮,复制到对应信息后粘贴给第三方应用。

主要代码实现

PackageInfo pi = getPackageManager().getPackageInfo(
      packageName, PackageManager.GET_SIGNATURES);
Signature signatures = pi.signatures[0];

MessageDigest md = MessageDigest.getInstance("MD5");
md.update(signatures.toByteArray());
byte[] digest = md.digest();
md5 = toHexString(digest);

MessageDigest md2 = MessageDigest.getInstance("SHA1");
md2.update(signatures.toByteArray());
byte[] digest2 = md2.digest();
sha1 = toHexString(digest2);

ByteArrayInputStream bais = new ByteArrayInputStream(signatures.toByteArray());
CertificateFactory cf = CertificateFactory.getInstance("X.509");
X509Certificate cert = (X509Certificate)cf.generateCertificate(bais);
signName = cert.getSigAlgName();

private void byte2hex(byte b, StringBuffer buf) {
     char[] hexChars = { '0', '1', '2', '3', '4', '5', '6', '7', '8',
                '9', 'A', 'B', 'C', 'D', 'E', 'F' };
     int high = ((b & 0xf0) >> 4);
     int low = (b & 0x0f);
     buf.append(hexChars[high]);
     buf.append(hexChars[low]);
}
private String toHexString(byte[] block) {
     StringBuffer buf = new StringBuffer();
     int len = block.length;
     for (int i = 0; i < len; i++) {
          byte2hex(block[i], buf);
          if (i < len-1) {
             buf.append(":");
          }
     }
     return buf.toString();
}

源码下载地址

源码已上传至CSDN,地址:源码下载

你可能感兴趣的:(笔记,Android)