古詩詞大全網 - 藝術簽名 - 如何獲取android 簽名信息

如何獲取android 簽名信息

android中有時候需要獲取應用的簽名信息,簽名信息壹般有:公鑰,算法名,MD5值,序列號。要想獲取這些信息首先該APK應用要有系統權限。

1. 在配置文件裏添加系統權限:android:sharedUserId="android.uid.system"

2. 獲取簽名信息的字符信息:

String signature_key = "";

try{

PackageInfo packageInfo = context.getPackageManager().getPackageInfo(pkgName,

PackageManager.GET_SIGNATURES);

Signature[] signatures =

packageInfo.signatures;

SignatureKey.parseSignature(signatures[0].toByteArray());

} catch (NameNotFoundException e) {

e.printStackTrace();

} catch (NullPointerException e) {

e.printStackTrace();

}

(1).其中packageInfo 得到的是指定包名的簽名信息的字符串。另提及多說壹句:在程序中我們壹般使用

List list =

mPackageManager.getInstalledPackages(0);來得到所有的安裝包的信息,這其中包括應用名,包名,大小....

(2).

其中[]signatures裏是存放的簽名的字符串數組。我們壹般取用第壹個signatures[0]來做為該應用的簽名信息。這裏有壹個疑惑就是為什麽得到的是壹個字符串的數組列表,而不是壹個字符串,也有的開發者采用:

StringBuilder builder = new StringBuilder();

for(Signature sign: signatures

){

builder.append(sign.toCharsString());

builder.append("/n");

}來得到所有的簽名信息。在這裏我驗證過,signatures

的長度為1,所以指定apk的簽名信息就為signatures[0]。

至於第二種方法有待發現。

3 .獲取簽名的MD5值

public static final String getMD5String(byte[] paramArrayOfByte)

{

char[] asciiTable = { 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,

97, 98, 99, 100, 101, 102 }; // ascii表對應的數字和字符的編碼

try

{

MessageDigest md5MessageDigest =

MessageDigest.getInstance("MD5");

md5MessageDigest.update(paramArrayOfByte);//

byte[]

tempByte = md5MessageDigest.digest();

int i =

tempByte.length;

char[] tempChar = new char[i *

2];

int j = 0;

int k =

0;

while (true) { //

將二進制數組轉換成字符串

if (j >= i)

{

return new

String(tempChar);

}

int m

= tempByte[j];

int n = k +

1;

tempChar[k] = asciiTable[(0xF & m >>>

4)];

k = n +

1;

tempChar[n] = asciiTable[(m &

0xF)];

j++;

}

}

catch (Exception e)

{

e.printStackTrace();

}

return

null;

}

(1). 其中參數就是上壹步得到的簽名的byte數組。

4. 獲取公鑰,簽名算法,簽名序列號

public static void parseSignature(byte[] signature)

{

try

{

CertificateFactory

certFactory =

CertificateFactory.getInstance("X.509");

X509Certificate cert = (X509Certificate) certFactory.generateCertificate(new

ByteArrayInputStream(signature));

String pubKey =

cert.getPublicKey().toString(); //公鑰

String signNumber =

cert.getSerialNumber().toString();

System.out.println("signName:" +

cert.getSigAlgName());//算法名

System.out.println("pubKey:" +

pubKey);

System.out.println("signNumber:" +

signNumber);//證書序列編號

System.out.println("subjectDN:"+cert.getSubjectDN().toString());

} catch (CertificateException e)

{

e.printStackTrace();

}

}

5. 電腦查看APK簽名信息

查看三方應用或是系統應用簽名

用winrar打開待查看的apk,將其中META-INF文件夾解壓出來,得到其中的CERT.RSA文件

1.keytool

-printcert -file META-INF/CERT.RSA

命令是:keytool -printcert -file

<簽名文件RSA的路徑>

2.jarsigner -verify -verbose -certs Superuser.apk

此條未驗證成功