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

来源:互联网 发布:卡罗拉双擎销量数据 编辑:程序博客网 时间:2024/06/06 00:06

每当我们在接入第三方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和源码地址:点击此处下载




原创粉丝点击