android 获取apk md5值

来源:互联网 发布:淘宝卖家客服电话热线 编辑:程序博客网 时间:2024/06/10 17:50

转载自: http://blog.csdn.net/qq1761310972/article/details/44540955

android 获取apk md5值

1, 获取 Signature 

2.   根据Signature计算md5和sha1信息,获取签名公钥信息


TextView text = null;

StringBuffer sb = new StringBuffer();

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        text = (TextView) findViewById(R.id.text);

        try {

PackageInfo pi = getPackageManager().getPackageInfo(getPackageName(), PackageManager.GET_SIGNATURES);

Signature signatures = pi.signatures[0];

MessageDigest md = MessageDigest.getInstance("MD5");

md.update(signatures.toByteArray());

byte[] digest = md.digest(); 

String res = toHexString(digest);

Log.e(TAG"apk md5 = "+res);

sb.append("apk md5 = "+res);

MessageDigest md2 = MessageDigest.getInstance("SHA1");

md2.update(signatures.toByteArray());

byte[] digest2 = md.digest(); 

String res2 = toHexString(digest2);

Log.e(TAG"apk SHA1 = "+res2);

sb.append("\napk SHA1 = "+res2);

ByteArrayInputStream bais = new ByteArrayInputStream(signatures.toByteArray());

CertificateFactory cf = CertificateFactory.getInstance("X.509");

X509Certificate cert = (X509Certificate)cf.generateCertificate(bais);

 

String sigAlgName = cert.getSigAlgName(); 

String subjectDN = cert.getSubjectDN().toString();

Log.e(TAG"sigAlgName = "+sigAlgName);

Log.e(TAG"subjectDN = "+subjectDN);

sb.append("\n sigAlgName = "+sigAlgName);

sb.append("\n subjectDN = "+subjectDN);

bais.close();

        } catch (NameNotFoundException e) {

e.printStackTrace();

catch (NoSuchAlgorithmException e) {

e.printStackTrace();

catch (CertificateException e) {

e.printStackTrace();

catch (IOException e) {

e.printStackTrace();

}

        

        text.setText(sb.toString());

        

    }


    

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

    }


    /*

     * Converts a byte array to hex string

     */

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

    }



0 0
原创粉丝点击