您的位置:首页 > 移动开发 > Android开发

Android 通过应用包名获取MD5和SHA1值

2017-08-15 16:13 387 查看
每当我们在接入第三方sdk的时候,总是要上传一些应用签名文件的MD5和SHA1等等... 然而每次获取的时候都要输入命令获取,所以自己干脆写个应用来获取应用的签名岂不是更好?

其实微信是有提供这个APP的,但是比较坑的一点是它获取到的值竟然不能复制。。。而且每次去微信网站找也挺费劲的,隐藏的特别深。所以就打算自己写一个,其实很早以前就写过一次,只是当时以为用的不是特别多,就没上传到csdn,导致每次需要的时候找不到。

通过包名获取应用签名其实Android直接就有提供的API,通过PackageManager这个管理类来获取到PackageInfo,再通过PackageInfo获取到Signature数组中的第一个元素。所有的签名信息都在Signature中保存。直接看代码吧,调用这个方法传入包名就可以获取到应用MD5和SHA1签名

private String getApplicationPackage(String packageName) {

try {
// 通过包管理器获取指定包名包含签名的信息
Signature signature = mPackageManager.getPackageInfo(packageName, PackageManager.GET_SIGNATURES).signatures[0];

MessageDigest messageDigestMd5 = MessageDigest.getInstance("MD5");
MessageDigest messageDigestSHA1 = MessageDigest.getInstance("SHA1");

// 通过 MessageDigest这个类来分别取出 Signature中存储的MD5和SHA1
messageDigestMd5.update(signature.toByteArray());
messageDigestSHA1.update(signature.toByteArray());

// 把MessageDigest中存储的md5和sha1转为字符串
String md5 = toHextring(messageDigestMd5.digest());
String sha1 = toHextring(messageDigestSHA1.digest());
return "md5 = "+md5+ "\n sha1 = " + sha1;

} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
return "未找到这个包名" ;
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
return "未找到对应的算法" ;
}

}

上面那个方法里面会用到下面toHextring方法 

private String toHextring(byte[] block) {

StringBuffer buf = new StringBuffer();

for (byte aBlock : block) {
byte2Hex(aBlock, buf);
}

return buf.toString();

}


toHextring() 会调用byte2Hex()方法,byte2Hex()这个方法就是把byte转换为high和low字符,最终返回一个字符串

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]);

}


到此整个获取应用签名的代码就写完了----end

获取签名的apk和源码地址:点击此处下载
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android md5 sha1 应用 api
相关文章推荐