天天看点

通过android应用获取第三方应用签名的源码前言通过命令行获取签名MD5

前言

以下代码,运行在Android上可以通过第三方的包名来获取第三方应用的MD5签名。

private Signature[] getRawSignature(Context paramContext, String paramString) {
        if ((paramString == null) || (paramString.length() == )) {
            errout("getSignature, packageName is null");

            return null;
        }

        PackageManager localPackageManager = paramContext.getPackageManager();
        PackageInfo localPackageInfo;

        try {
            localPackageInfo = localPackageManager.getPackageInfo(paramString,
                    );

            if (localPackageInfo == null) {
                errout("info is null, packageName = " + paramString);

                return null;
            }
        } catch (PackageManager.NameNotFoundException localNameNotFoundException) {
            errout("NameNotFoundException");

            return null;
        }

        return localPackageInfo.signatures;
    }

    /**
    *paramString:第三方android应用的包名
    */
    private String getSign(String paramString) {
        Signature[] arrayOfSignature = getRawSignature(this, paramString);

        if ((arrayOfSignature == null) || (arrayOfSignature.length == )) {
            errout("signs is null");
        }
        StringBuffer sign = new StringBuffer();
        while (true) {
            return;

            int i = arrayOfSignature.length;

            for (int j = ; j < i; j++)
                sign.append(MD5.getMessageDigest(arrayOfSignature[j].toByteArray()));
        }
        return sign.toString();
    }
           

MD5加密代码:

import java.security.MessageDigest;


public final class MD5 {
    public static final String getMessageDigest(byte[] paramArrayOfByte) {
        char[] arrayOfChar1 = {
                , , , , , , , , , , , , , , ,
                
            };

        try {
            MessageDigest localMessageDigest = MessageDigest.getInstance("MD5");
            localMessageDigest.update(paramArrayOfByte);

            byte[] arrayOfByte = localMessageDigest.digest();
            int i = arrayOfByte.length;
            char[] arrayOfChar2 = new char[i * ];
            int j = ;
            int k = ;

            while (true) {
                if (j >= i) {
                    return new String(arrayOfChar2);
                }

                int m = arrayOfByte[j];
                int n = k + ;
                arrayOfChar2[k] = arrayOfChar1[( & m >>> )];
                k = n + ;
                arrayOfChar2[n] = arrayOfChar1[(m & )];
                j++;
            }
        } catch (Exception localException) {
        }

        return null;
    }

    public static final byte[] getRawDigest(byte[] paramArrayOfByte) {
        try {
            MessageDigest localMessageDigest = MessageDigest.getInstance("MD5");
            localMessageDigest.update(paramArrayOfByte);

            byte[] arrayOfByte = localMessageDigest.digest();

            return arrayOfByte;
        } catch (Exception localException) {
        }

        return null;
    }
}
           

通过命令行获取签名MD5

第一步、打开Android Studio的Tools->Open Terminal..
    或者是在cmd命令窗口中操作。
第二步、输入命令:keytool -v -list -keystore keystore.jks
keytool这个命令,来自于jdk。
           

来源于:日积月累–AndroidStudio使用技巧