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

本文介绍了一种在Android应用中获取应用签名的方法。通过使用PackageManager获取应用的PackageInfo,并从中提取Signature,进而得到签名的字节数组。接着利用SHA-1算法对签名进行哈希处理,最后将哈希值转换为十六进制字符串形式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值