某些时候需要获取某个特定的apk(已安装或者未安装)的签名信息,如程序自检测,可信赖的第三方检测(应用市场),系统限定安装
对此,有两种实现方法
可以使用Java自带的API(主要用到的为JarFile,JarEntry,Certificate)进行获取,还有一种方法是使用系统隐藏的API PackageParser,通过反射来使用对应的API.
但是由于安卓系统的分裂版本过多,并且不同厂商进行的修改很多,依赖反射隐藏API的方法并不能保证兼容性和通用性,因此推荐使用JAVA自带API进行获取:
/**
* 从APK中读取签名
* @param file
* @return
* @throws IOException
*/
private static List<String> getSignaturesFromApk(File file) throws IOException {
List<String> signatures=new ArrayList<String>();
JarFile jarFile=new JarFile(file);
try {
JarEntry je=jarFile.getJarEntry("AndroidManifest.xml");
byte[] readBuffer=new byte[8192];
Certificate[] certs=loadCertificates(jarFile, je, readBuffer);
if(certs != null) {
for(Certificate c: certs) {
String sig=toCharsString(c.getEncoded());
signatures.add(sig);
}
}
} catch(Exception ex) {
}
return signatures;
}
/**
* 加载签名
* @param jarFile
* @param je
* @param readBuffer
* @return
*/
private static Certificate[] loadCertificates(JarFile jarFile, JarEntry je, byte[] readBuffer) {
try {
InputStream is=jarFile.getInputStream(je);
while(is.read(readBuffer, 0, readBuffer.length) != -1) {
}
is.close();
return je != null ? je.getCertificates() : null;
} catch(IOException e) {
}
return null;
}
/**
* 将签名转成转成可见字符串
* @param sigBytes
* @return
*/
private static String toCharsString(byte[] sigBytes) {
byte[] sig=sigBytes;
final int N=sig.length;
final int N2=N * 2;
char[] text=new char[N2];
for(int j=0; j < N; j++) {
byte v=sig[j];
int d=(v >> 4) & 0xf;
text[j * 2]=(char)(d >= 10 ? ('a' + d - 10) : ('0' + d));
d=v & 0xf;
text[j * 2 + 1]=(char)(d >= 10 ? ('a' + d - 10) : ('0' + d));
}
return new String(text);
}
分享到:
相关推荐
在Android系统中,APK签名...总结,Android 10 APK签名文件是应用开发不可或缺的一部分,它关乎应用的安全、权限获取以及用户信任。开发者需熟知签名机制,合理运用签名工具,遵循最佳实践,以确保应用的质量和安全性。
在Android应用开发中,APK签名是一个至关重要的步骤,它确保了应用的完整性和来源的可信性。在Windows环境下,开发者通常使用特定的工具来对APK进行签名,以使其能够在Android设备上顺利安装和运行。本文将详细介绍...
微信签名工具,即`Gen-Signature-android.apk`,是一个专为开发者设计的工具,用于生成和管理Android应用的签名文件。这个工具可以帮助开发者对他们的APK进行签名,以确保其能够在用户的设备上正常安装和运行。由于...
本主题聚焦于"android安卓获取apk签名工具",这通常涉及到APK签名的概念、过程以及如何使用特定工具来完成这一任务。 **APK签名的重要性** 1. **验证开发者身份**:签名提供了一种方式,让用户知道应用的来源,...
本文将详细介绍Android APK签名工具及其使用方法。 Android Studio,作为官方推荐的集成开发环境,内置了签名工具,允许开发者轻松地为他们的应用签名。描述中提到的"android system signature tool"很可能是指`...
本文实例讲述了Android获取apk签名指纹的md5值以防止重新被打包的实现方法。分享给大家供大家参考,具体如下: 做个记录(这里只是Java层的签名校验,java层容易被破解,我建议apk加固下) 获取md5值来进行Apk签名校验...
在Android开发过程中,Apk签名是一个至关重要的步骤,它确保了应用的安全性和完整性。本文将深入探讨Android Apk签名工具的使用,以及它在构建和发布Android应用过程中的作用。 首先,我们需要理解什么是Apk签名。...
在Android开发过程中,APK打包签名是一个至关重要的环节,它涉及到应用的安全性和可分发性。本文将详细讲解Android APK的打包和签名过程,以及如何使用Eclipse、IntelliJ IDEA等工具进行签名操作。 首先,理解签名...
本源代码是使用JNI获得APK签名的哈希值,先通过获取app的包名,判断该包名是否合法,然后再获取该包名的签名,判断是否合法.我们不能够用jni来判断签名是否合法,然后又回到java那里去,只能使用jni来编写核心代码.否则是...
在这个场景下,"查看APK签名信息和版本号工具"显然是一个用于帮助开发者获取这些关键信息的实用工具,而"aapt.exe"则是实现这一功能的关键组件。 **aapt.exe**是Android Asset Packaging Tool的缩写,它是Android ...
APK签名是Android安全模型的一部分,它通过数字签名技术对APK进行验证,保证应用未经篡改,并且可以追溯到开发者。Android系统在安装APK时会检查签名,如果签名无效或缺失,系统将不允许安装。 批处理脚本是一种...
本话题主要涉及“微信工具apk签名获取”,这是一个官方提供的帮助开发者获取APK签名的工具。 首先,我们来理解一下什么是APK签名。在Android系统中,每个安装到设备上的应用程序都需要一个数字签名,这是为了确保...
总之,"查看apk签名工具"是一个实用的辅助工具,它简化了查看APK签名信息的过程,对于调试、安全分析和应用分发具有很高的价值。通过输入APK的包名,开发者可以快速检查应用的签名状态,确保其符合发布要求,并保护...
APK签名的过程主要包括以下几个步骤: 1. **生成密钥对**:首先,开发者需要使用密钥生成工具(如Java的keytool)创建一个包含公钥和私钥的密钥对。私钥用于签名,而公钥则用于验证签名。 2. **构建APK**:开发...
2. **提取签名信息**:签名信息通常是一串长长的十六进制字符串,可以通过` keytool `工具查看。例如: ``` keytool -printcert -file <your_apk>.apkCERT.RSA ``` 这将显示包括SHA-1和MD5在内的摘要信息,但...
首先,理解APK签名的重要性。Android系统要求所有安装的APK必须经过签名,签名的过程是对APK的内容使用私钥进行加密,验证应用的完整性和开发者身份。默认情况下,每个开发者都会有自己的签名,用于发布应用。然而,...
这个“一个android读取apk信息的demo程序”就是为了展示如何在Android环境中解析APK文件并提取其包含的各种信息。APK是Android应用程序的打包格式,它包含了应用的代码、资源、配置文件等。下面我们将深入探讨如何在...
Android APK 系统签名工具(signapk.jar)是Android应用开发过程中不可或缺的一部分,它主要用于对APK文件进行签名,这是Android系统安装应用的基本要求。在Android平台上,每个应用程序都需要一个数字签名来验证其...
1. **下载工具**:首先,需要从可靠的来源获取APK万能签名工具,例如`APKSign_7edown.com`。 2. **准备APK文件**:找到需要重新签名的APK文件,将其保存到本地。 3. **启动工具**:运行下载的签名工具,根据界面指示...
### Android APK空包签名详解 #### 一、引言 在Android应用开发过程中,签名是发布应用程序的一个重要环节。正确地进行签名不仅能够确保应用程序的完整性和安全性,还能避免因签名问题导致的应用无法正常更新或...