获取apk签名 获取apk签名的hash值

public void getSignature() {
    PackageManager   manager = getPackageManager();
    StringBuilder   builder = new StringBuilder();
    String pkgname = getPackageName();
    boolean isEmpty = pkgname.isEmpty();
    if (isEmpty) {
        Toast.makeText(this, "应用程序的包名不能为空!", Toast.LENGTH_SHORT);
    } else {
        try {
           
            PackageInfo packageInfo = manager.getPackageInfo(pkgname, PackageManager.GET_SIGNATURES);
          
            Signature[] signatures = packageInfo.signatures;
            Signature sign = signatures[0];
           
            byte[] signByte = sign.toByteArray();
            Log.e("getSingInfo", bytesToHexString(signByte));
            Log.e("getSingInfo hash", bytesToHexString(generateSHA1(signByte)));
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }
    }
}

public static byte[] generateSHA1(byte[] data) {
    try {
        // 使用getInstance("算法")来获得消息摘要,这里使用SHA-1的160位算法
        MessageDigest messageDigest = MessageDigest.getInstance("SHA-1");
        // 开始使用算法
        messageDigest.update(data);
        // 输出算法运算结果
        byte[] hashValue = messageDigest.digest(); // 20位字节
        return hashValue;
    } catch (Exception e) {
        Log.e("generateSHA1", e.getMessage());
    }
    return null;

}


public static String bytesToHexString(byte[] bytes) {
        if (bytes == null) {
                return "";
        }
        StringBuilder buff = new StringBuilder();
        for (byte aByte : bytes) {
                if ((aByte & 0xff) < 16) {
                        buff.append('0');
                }
                buff.append(Integer.toHexString(aByte & 0xff));
        }
        return buff.toString();
}

你可能感兴趣的:(获取apk签名 获取apk签名的hash值)