首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 獲取已安裝 APK 簽名摘要

     編輯:Java 相關知識

本文原內容為空,僅提供標題。此處補充核心實現方案:

核心 API

  • PackageManager.getPackageInfo(packageName, PackageManager.GET_SIGNATURES)
  • Signature.toByteArray() 獲取證書字節碼
  • MessageDigest.getInstance("SHA-256") 計算摘要

完整工具類


public class ApkSignatureUtil {
    public static String getSha256(Context context, String packageName) {
        try {
            PackageInfo info = context.getPackageManager()
                .getPackageInfo(packageName, PackageManager.GET_SIGNATURES);
            for (Signature sig : info.signatures) {
                MessageDigest md = MessageDigest.getInstance("SHA-256");
                md.update(sig.toByteArray());
                byte[] digest = md.digest();
                return bytesToHex(digest); // 轉十六進制字符串
            }
        } catch (PackageManager.NameNotFoundException | NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        return null;
    }
    private static String bytesToHex(byte[] bytes) {
        StringBuilder sb = new StringBuilder();
        for (byte b : bytes) sb.append(String.format("%02x", b));
        return sb.toString();
    }
}

應用場景

  • 應用完整性校驗(防二次打包)
  • 第三方 SDK 合法性驗證(如微信、支付寶開放平台)
  • 設備管理/MDM 合規檢查

注意事項

  • Android 7.0+ (API 24) 引入 PackageManager.GET_SIGNING_CERTIFICATES 獲取更完整證書鏈
  • 簽名方案 v1/v2/v3 摘要計算方式一致,均基於證書內容
  • 需聲明 <uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"/> (Android 11+ 查詢所有應用)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved