/**
* 获取签值信息
* @author allen
* @version 2013-8-27 下午4:15:04
* @return
*/
public static void getSingInfo() {
try {
PackageManager manager=BankApp.getApp().getPackageManager()
PackageInfo packageInfo=manager.getPackageInfo(BankApp.getApp().getPackageName(), PackageManager.GET_SIGNATURES);
Signature[] signs = packageInfo.signatures;
Signature sign = signs[0];
return parseSignature(sign.toByteArray());
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
public static String parseSignature(byte[] signature) {
try {
CertificateFactory certFactory = CertificateFactory.getInstance("X.509");
X509Certificate cert = (X509Certificate) certFactory.generateCertificate(new ByteArrayInputStream(signature));
String pubKey = cert.getPublicKey().toString();
String signNumber = cert.getSerialNumber().toString();
System.out.println("signName:" + cert.getSigAlgName());
} catch (CertificateException e) {
e.printStackTrace();
return null;
}
}
获取到以上信息可以用来做签名比对。
非android环境下获取签名信息:
private static char[] toChars(byte[] mSignature) {
byte[] sig = mSignature;
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 text;
}
private static java.security.cert.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 (java.security.cert.Certificate[])(je!=null?je.getCertificates():null);
} catch (Exception e) {
e.printStackTrace();
System.err.println("Exception reading "+je.getName()+" in "+jarFile.getName()+": "+e);
}
return null;
}
public static String getApkSignInfo(String apkFilePath){
byte[] readBuffer = new byte[8192];
java.security.cert.Certificate[] certs = null;
try{
JarFile jarFile = new JarFile(apkFilePath);
Enumeration entries = jarFile.entries();
while(entries.hasMoreElements()){
JarEntry je = (JarEntry)entries.nextElement();
if(je.isDirectory()){
continue;
}
if(je.getName().startsWith("META-INF/")){
continue;
}
java.security.cert.Certificate[] localCerts = loadCertificates(jarFile,je,readBuffer);
System.out.println("File " + apkFilePath + " entry " + je.getName()+ ": certs=" + certs + " ("+ (certs != null ? certs.length : 0) + ")");
if (certs == null) {
certs = localCerts;
}else{
for(int i=0; i<certs.length; i++){
boolean found = false;
for (int j = 0; j < localCerts.length; j++) {
if (certs[i] != null && certs[i].equals(localCerts[j])) {
found = true;
break;
}
}
if (!found || certs.length != localCerts.length) {
jarFile.close();
return null;
}
}
}
}
jarFile.close();
return new String(toChars(certs[0].getEncoded()));
}catch(Exception e){
e.printStackTrace();
}
return null;
}
相关推荐
总的来说,这款"安卓签名获取工具"简化了Android开发者获取签名信息的过程,从而提高了开发效率。通过理解和使用这类工具,开发者可以更好地管理和维护他们的应用,同时顺利进行第三方服务的集成。记住,对于安全性...
在这个"android代码获取签名MD5指纹demo"中,我们将深入探讨如何在Android代码中获取应用签名的MD5指纹。 首先,我们需要理解Android应用的签名流程。在Android中,每个APK在打包发布前都需要进行签名。这个过程会...
2. **提取签名信息**:签名信息通常是一串长长的十六进制字符串,可以通过` keytool `工具查看。例如: ``` keytool -printcert -file <your_apk>.apkCERT.RSA ``` 这将显示包括SHA-1和MD5在内的摘要信息,但...
通过提供的两个APK文件(获取SHA1.apk和获取md5.apk),可能是工具或者教程的示例,帮助开发者学习如何执行上述步骤,从而获取自己的APK签名信息。使用这些工具或按照上述步骤操作,可以快速便捷地获取Android应用的...
android获取应用签名
在Android平台上,获取CPU、内存和磁盘使用率信息对于开发者来说是十分重要的,这有助于监控设备性能,优化应用运行,以及提供用户友好的反馈。然而,由于Android系统的安全机制,不同的权限级别决定了你能获取到何...
该APP提供了获取手机上已安装的所有应用的签名信息,并支持直接复制。
总结起来,Android获取签名和公钥的流程主要包括: 1. 使用`PackageManager`获取应用的签名信息。 2. 从签名字节数组中创建`X509Certificate`对象。 3. 从`X509Certificate`中提取公钥信息。 这样的操作对于实现...
android系统签名,模拟器可用,用法见readme
获取android安装的APP(apk)签名md5值,输入包名点击查询,即可显示包名对应的签名md5值 查询后,自动保存;这个本来是写来自己公司用的小工具,在之前app开发的时候,调试微信登录等等需要用到签名的地方,因为...
MD5 SHA1 SHA256 签名信息 点击签名信息可复制到剪切板, GitHub:https://github.com/sunan-n/GetAppInfo 如下图: ```java 主要就是这个方法,传参数进来获取相应的签名类型 信息 public static String ...
在这个“android获取应用32位签名”的压缩包中,可能包含了用于获取或验证Android应用32位签名的相关代码和工具。下面将详细解释这个主题。 1. **应用签名的作用**: - **身份验证**:签名确保应用是由已知开发者...
1. 下载并解压"mac android app 签名工具"压缩包,获取ApkSignTool.app。 2. 准备你的APK文件,这可能是你编译的原始APK,或者是需要二次签名的APK。 3. 使用Java Keytool(通常包含在JDK中)创建一个新的密钥库和...
Android Studio内置了Keystore系统,帮助开发者管理这些签名信息。 当忘记签名密码时,通常会面临无法对新版本应用进行更新的问题,因为Google Play Store要求更新的应用必须与之前版本使用相同的签名。在这种情况...
3. **通过代码实现**:在Android应用内部,你可以使用Java或Kotlin代码获取签名信息。以下是一个简单的示例: ```java PackageInfo packageInfo; try { packageInfo = getPackageManager().getPackageInfo...
2. **查找签名信息**:在APK的`META-INF`目录下找到签名文件(如`MANIFEST.MF`、`CERT.SF`和`.RSA`文件),这些文件包含了签名的详细信息。 3. **提取签名**:从`.RSA`文件中提取出签名证书的摘要信息,包括证书的...
Android重新签名工具是用来修改已签名APK的签名信息,通常在应用需要进行二次打包、加固或更新时使用。以下将详细介绍Android签名机制以及如何使用这样的工具。 一、Android签名机制 Android应用在发布前必须经过...
1. **密钥库保护**:密钥库和私钥应妥善保管,避免泄露,因为一旦丢失,无法重新获取相同的签名。 2. **签名兼容性**:如果应用已有签名,后续更新必须使用相同的签名,否则无法安装。 3. **测试签名与正式签名**:...
当用户尝试安装应用时,Android系统会检查签名,只有签名有效且与开发者信息匹配的应用才能成功安装。 二、签名的重要性 1. **验证身份**:签名可以证明应用的开发者身份,有助于建立用户对应用的信任。 2. **安全...