• 获取 Android app的签名


    可以利用Java的JarFile ,JarEntry,Certificate  来获取android app的签名信息

    public class Do {
    
        private static final char[] wJ = "0123456789abcdef".toCharArray();
    
        /**
         * 从APK中读取签名
         * 
         * @param file
         * @return
         * @throws IOException
         */
        public String getSignaturesFromApk(File file) throws IOException {
            JarFile jarFile = new JarFile(file);
            try {
                JarEntry je = jarFile.getJarEntry("AndroidManifest.xml");
                byte[] readBuffer = new byte[8192];
                Certificate[] certs = loadCertificates(jarFile, je, readBuffer);
                jarFile.close();
                if (certs != null) {
                    for (Certificate c : certs) {
                        byte buffer[] = c.getEncoded();
                        return k(j(buffer));
                    }
                }
            } catch (Exception ex) {
                ex.printStackTrace();
            }finally{
                jarFile.close();
            }
            return null;
        }
    
        private String k(byte[] paramArrayOfByte) {
            StringBuilder localStringBuilder = new StringBuilder(
                    3 * paramArrayOfByte.length);
            int i = paramArrayOfByte.length;
            for (int j = 0;; j++) {
                if (j >= i)
                    return localStringBuilder.toString().toUpperCase();
                int k = 0xFF & paramArrayOfByte[j];
                localStringBuilder.append(wJ[(k >> 4)]);
                localStringBuilder.append(wJ[(k & 0xF)]);
            }
        }
    
        public byte[] j(byte[] paramArrayOfByte) {
            try {
                MessageDigest localMessageDigest = MessageDigest.getInstance("MD5");
                localMessageDigest.update(paramArrayOfByte);
                byte[] arrayOfByte = localMessageDigest.digest();
                return arrayOfByte;
            } catch (NoSuchAlgorithmException localNoSuchAlgorithmException) {
                localNoSuchAlgorithmException.printStackTrace();
            }
            return null;
        }
    
        /**
         * 加载签名
         * 
         * @param jarFile
         * @param je
         * @param readBuffer
         * @return
         */
        private Certificate[] loadCertificates(JarFile jarFile, JarEntry je,
                byte[] readBuffer) {
            InputStream is = null;
            try {
                is = jarFile.getInputStream(je);
                while (is.read(readBuffer, 0, readBuffer.length) != -1) {
                }
    //            is.close();
                return je != null ? je.getCertificates() : null;
            } catch (IOException e) {
                e.printStackTrace();
            }finally{
                if(is != null){
                    try {
                        is.close();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
            }
            return null;
        }
    
    }
  • 相关阅读:
    状压DP【p1879】[USACO06NOV]玉米田Corn Fields
    Tarjan缩点+Spfa最长路【p3627】[APIO2009] 抢掠计划
    Tarjan缩点【p1726】上白泽慧音
    分层图【p4822】[BJWC2012]冻结
    Tarjan缩点+LCA【p2783】有机化学之神偶尔会做作弊
    线段树【p1607】[USACO09FEB]庙会班车Fair Shuttle
    better-scroll踩坑合集
    在浏览器上安装 Vue Devtools工具
    无法执行vue初始化命令
    vue-cli创建第一个项目(用git bash解决上下键移动选择问题)
  • 原文地址:https://www.cnblogs.com/phyxis/p/5474023.html
Copyright © 2020-2023  润新知