Android应用签名

Android应用签名

本文主要记录下自己在平时用到的android应用签名相关的一些方法.

1: apk文件获取PackageInfo

public static  PackageInfo getPackageInfo(Context c, File pkgFile, int flag) {
    try {
        PackageInfo  pi = c.getPackageManager().getPackageArchiveInfo(pkgFile.getAbsolutePath(), flag);
        return pi;
    } catch (Throwable throwable) {
        Log.e("xxxxx", "getPackageInfo: ", throwable);
    }
    return null;
}

使用该方法需要传入一个APK文件,然后返回一个PackageInfo对象,该对象包含了APK文件的详细信息,包括包名、版本号、应用名称、图标等信息。
flags:标志位,用于指定要获取的信息类型,例如版本号、签名等。

2: 根据包名获取PackageInfo

public static PackageInfo getPackageInfo(Context c, String pkgName, int flag) {
    try {
        return c.getPackageManager().getPackageInfo(pkgName, flag);
    } catch (Throwable e) {
          Log.e("xxxxx", "getPackageInfo: ", throwable);
    }
    return null;
}

使用该方法需要传入指定包名。

3: 获取getSHA1

public static String getSHA1(byte[] sig) {
    final char[] hexArray = "0123456789ABCDEF".toCharArray();
    try {
        MessageDigest md = MessageDigest.getInstance("SHA1");
        byte[] digest = md.digest(sig);
        char[] hexChars = new char[digest.length * 2];
        for (int j = 0; j < digest.length; j++) {
            int v = digest[j] & 0xFF;
            hexChars[j * 2] = hexArray[v >>> 4];
            hexChars[j * 2 + 1] = hexArray[v & 0x0F];
        }
        return new String(hexChars);
    } catch (Throwable e) {
       Log.e("xxxxx", "getSHA1: ", throwable);
    }
    return "";
}

4: 对比两个应用的签名是否一致

/**
 * @param currentPkg
 * @param comparePkg
 * @return true: 签名一致
 */
public static boolean compareSign(PackageInfo currentPkg, PackageInfo comparePkg) {
    try {
        Signature[] sign1 = currentPkg.signatures;
        Signature[] sign2 = comparePkg.signatures;
        byte[] bytes = sign1[0].toByteArray();
        byte[] bytes1 = sign2[0].toByteArray();
        MessageDigest md = MessageDigest.getInstance("SHA-256");
        byte[] digest1 = md.digest(bytes);
        byte[] digest2 = md.digest(bytes1);
        return Arrays.equals(digest1, digest2);
    } catch (Throwable e) {
         Log.e("xxxxx", "compareSign: ", e);
    }
    return true;
}
  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值