閒着沒事兒寫了個小 demo ,獲取手機上已安裝應用信息,系統應用和 非系統應用
MD5 SHA1 SHA256 簽名信息 點擊簽名信息可複製到剪切板.
下載鏈接:https://download.csdn.net/download/sinat_32961877/12287543
2020.03.02 更新了一下,加了列表搜索功能,輸入 包名或者app name
如下圖:
主要就是這個方法,傳參數進來獲取相應的簽名類型 信息
public static String getSignaturesInfo(Context context, String packageName, String tpye) {
// //獲取包管理器
PackageManager pm = context.getPackageManager();
//返回包括在包中的簽名信息
int flags = PackageManager.GET_SIGNATURES;
PackageInfo packageInfo = null;
try {
//獲得包的所有內容信息類
packageInfo = pm.getPackageInfo(packageName, flags);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
//簽名信息
Signature[] signatures = packageInfo.signatures;
byte[] cert = signatures[0].toByteArray();
//將簽名轉換爲字節數組流
InputStream input = new ByteArrayInputStream(cert);
//證書工廠類,這個類實現了出廠合格證算法的功能
CertificateFactory cf = null;
try {
cf = CertificateFactory.getInstance("X509");
} catch (CertificateException e) {
e.printStackTrace();
}
//X509證書,X.509是一種非常通用的證書格式
X509Certificate c = null;
try {
c = (X509Certificate) cf.generateCertificate(input);
} catch (CertificateException e) {
e.printStackTrace();
}
String hexString = null;
try {
//加密算法的類,這裏的參數可以使MD4,MD5等加密算法
// MessageDigest md = MessageDigest.getInstance("SHA1");
MessageDigest md = MessageDigest.getInstance(tpye);
//獲得公鑰
byte[] publicKey = md.digest(c.getEncoded());
//字節到十六進制的格式轉換
hexString = byte2HexFormatted(publicKey);
} catch (NoSuchAlgorithmException e1) {
e1.printStackTrace();
} catch (CertificateEncodingException e) {
e.printStackTrace();
}
return hexString;
}