`
quanminchaoren
  • 浏览: 924239 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Android 签名信息读取

阅读更多
public void getSingInfo() {     

try { 

         PackageManager manager=getPackageManager()

         PackageInfo packageInfo=manager.getPackageInfo(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()); 

System.out.println("pubKey:" + pubKey);    
System.out.println("signNumber:" + signNumber);           
System.out.println("subjectDN:"+cert.getSubjectDN().toString());

} catch (CertificateException e) {        
          e.printStackTrace();     
          return null;

}

获取到以上信息可以用来做签名比对。


非android环境下获取签名信息:

private 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 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 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之RSA加密解密签名验签(亲测可用)

    在Android开发中,数据安全是至关重要的,尤其是在网络通信中传输敏感信息时。RSA是一种非对称加密算法,常用于确保数据的机密性和完整性。本文将深入探讨如何在Android应用中实现RSA加密、解密以及签名和验签的全...

    Android应用签名读取工具下载

    1、将你开发的Android App安装到测试手机上; 2、将此Gen_Signature_Android.apk文件安装到手机上; 3、打开此应用,输入你的App应用的包名(Activity.java的第一行,package后面的内容,例如:...

    Android签名工具

    本文将详细解析“Android签名工具”及其重要性,以及如何使用这类工具对APK进行签名或重签名。 首先,理解Android签名的概念。Android签名是为了确保应用的完整性和开发者身份的一种机制。每个APK在发布前都需要...

    android签名工具.zip

    Android签名工具为开发者提供了一种简便的方法来查看APK的签名信息,这对于调试、更新或验证应用的签名状态非常有用。理解Android签名机制是每位Android开发者必备的知识,它保障了应用的安全性和用户体验。在实际...

    android10 apk签名文件

    - 验证完整性:通过对比签名信息和APK内容,检查文件是否在传输或存储过程中被修改。 - 身份认证:签名证书能识别开发者,使用户知道谁开发了该应用,有助于建立用户信任。 - 系统权限获取:在Android 10中,签名...

    Android电子签名pdf加载 签名可拖拽

    在Android平台上,开发一个能够加载PDF文件、实现电子签名并允许签名可拖拽的应用是一项具有挑战性的任务。本文将深入探讨这一技术实现的关键知识点,包括Android PDF处理、电子签名技术以及用户交互设计。 首先,...

    android客户端签名漏洞

    2013年,国家互联网应急中心(CNCERT)发现并通报了一种利用Android签名漏洞的恶意程序——Skullkey扣费木马。该木马通过利用Android操作系统中的签名漏洞,能够悄无声息地植入到正常的应用程序中,进而实现恶意扣费...

    android读取签名证书指纹SHA1信息

    在Android开发中,有时我们需要获取应用的签名证书指纹信息,特别是SHA1指纹,这在进行API集成、安全验证或者发布应用到Google Play等场景中非常常见。SHA1是一种广泛使用的哈希函数,可以将任意长度的数据映射为...

    Android系统签名工具.rar

    3. **输出APK**:签名后的APK会被保存,这个新的APK包含了签名信息,现在可以安全地分发给用户。如果需要,还可以使用Zipalign工具进行优化,以提高应用性能。 4. **验证阶段**:当用户尝试安装APK时,Android系统...

    Android应用源码PDF手写签名商业源码.zip

    该压缩包文件“Android应用源码PDF手写签名商业源码.zip”主要包含了一个Android应用程序的源代码,用于实现PDF文档的手写签名功能。在移动设备上,这种功能对于签署电子文档尤其有用,例如合同、协议等。让我们深入...

    android系统权限签名

    签名包含了开发者的信息以及对APK内容的哈希值,保证了应用未被篡改。Android系统在安装和运行应用时会验证这个签名,确保应用来自可信源并符合安全标准。 在这个特定的工具中,我们提到的是“系统权限的签名”,这...

    Android_apk打包签名

    对齐的作用在于,通过确保数据在4字节边界上对齐,使得Android系统在加载资源时可以使用mmap()函数,提高读取效率。这有助于减少内存拷贝,提高CPU访问速度,从而提升应用的性能。 总的来说,Android应用的签名和...

    android 电子签名 手写签名 存储和显示 studio 最新版本 没有问题

    至于显示签名,可以从本地文件或数据库中读取签名图像,然后用ImageView展示。如果是在网络服务器上存储,可以先下载再显示。此外,还可以通过自定义View来动态绘制签名图像,这在需要实时更新签名时非常有用。 在...

    用于对Android升级包和APK进行签名

    3. **ZIP Align**:签名后,为了优化APK的读取性能,需要执行ZIP对齐操作。这可以通过Android SDK的`zipalign`工具完成: ``` zipalign -v 4 signed MyApp.apk aligned MyApp.apk ``` 三、签名的类型 1. **...

    修改Android默认浏览器读取联系人patch

    在Android系统中,默认的浏览器应用通常具有读取联系人的权限,以便于用户可以通过输入姓名或电话号码快速填充网页表单。然而,这种行为可能会引起隐私方面的顾虑,有些用户可能不希望他们的联系人数据被浏览器访问...

    Android获取cpu,内存,磁盘使用率信息

    同时,Android还提供了`/proc/stat`系统文件,开发者可以通过读取该文件解析出CPU使用率,但这通常需要更高的权限。 内存使用率的获取相对复杂,因为Android提供了多种方式来查看内存状态。`ActivityManager....

    Android应用签名获取工具

    使用这个工具,用户只需要输入目标包名(即应用的唯一标识符,如`com.example.myapp`),工具就会自动读取并解析APK文件,提取出其中的签名信息。这对于需要验证其他应用签名、进行应用分析或者处理签名问题的开发者...

    Android应用源码PDF手写签名商业源码

    6. **安全与权限管理**:在处理敏感信息如签名时,必须遵循最佳的安全实践。应用可能需要请求读取和写入文件的权限,以及网络访问权限。此外,源码应确保签名数据的安全,防止未授权访问。 7. **测试与调试**:开发...

    android批量签名源码

    1. **Android签名机制**:在Android系统中,每个安装的应用都必须经过数字签名,以验证应用的身份和完整性。签名过程使用私钥对应用的APK文件进行加密,这样只有拥有对应公钥的系统才能解密并安装应用。 2. **Java...

    Android App的签名打包

    `zipalign`确保Apk中的未压缩数据在4字节边界上对齐,这样Android系统可以利用mmap()函数高效地读取资源。例如,`zipalign -v 4 demo_signed.apk final.apk`命令会对`demo_signed.apk`进行优化并生成`final.apk`。 ...

Global site tag (gtag.js) - Google Analytics