Android apk签名算法解析

转载 2015年11月18日 15:45:29

安卓 Apk签名是 Sun Jar 签名的一种特例。在安卓 Apk 签名时,除了META‐INF,其他每个文件都要先算 SHA1 Digest 放在META‐INF/Manifest.MF,然后用私钥加密 Manifest.MF 产出META‐INF/CERT.SF,证书等写入 META‐INF/CERT.RSA。具体可以参考安卓签名和分析。 从普通证书追朔到根证书,形成一个证书链。不过在安卓开发过程中通常采用自签名证书,这时证书链里 只有一个证书。 本文涉及的都是 X509Certificate,而且加密算法是 RSA


Android JavaSignature 

在 Android Java里,通过以下方法获得的 signatures 就是证书链。

PackageInfopackageInfo = getPackageManager().getPackageInfo(packageName,PackageManager.GET_SIGNATURES);
Signature[]signatures = packageInfo.signatures;

Signature的Signature(byte[]) 和 toByteArray() 是对称的, equals() 就是 bytearray 的逐字节比较; Signature(String) 和 toCharsArray() 是对称的,用的是十六进制字符串。

 

Sun Java Certificate

在 Sun Java里,通过以下方法获得的 certs 就是证书链。 X509Certificate

InputStream is =jarFile.getInputStream(je);
while (is.read(readBuffer, 0,readBuffer.length) != -1) {
}
is.close();
Certificate[] cert =je.getCertificates();

需要注意的是,META‐INF 和目录都需要忽略,其他所有 je 的 certs 都应该是相同的。

 

Android Signature 和Sun Java Certificate 的互相转换

// X509Certificateto Signature 
Signature sig = new Signature(cert.getEncoded());
// Signature toX509Ceritificate
<pre name="code" class="java">byte[] bytes = sig.toByteArray();
CertificateFactorycertificateFactory = CertificateFactory.getInstance("X.509");
InputStream in = newByteArrayInputStream(bytes);
X509Certificate cert= (X509Certificate)certificateFactory.generateCertificate(in);



钥与证书

Signature是没有公钥接口的,需先转换成 Certificate ,再调用 getPublicKey(),返回值的实现类 是RSAPublicKeyImpl 。 需要注意的是,PublicKey 和 Certificate 是不同的东西,Certificate 里包含了 PublicKey 。 RSAPublicKeyImpl 父类 X509Key 实现的getEncoded() 和 RSAPublicKeyImpl(byte[]) 是对称的,但是toString() 没有与之对称的构造函数,而且采用 10 进制字符串来输出 modulus 和 exponent 。X509Key 的 equals() 用的是 getEncoded() 值。


Android学习心得(21) --- apk签名源码解析

新博客地址blog.marssecure.com重打包检测对于apk重打包检测中,验证签名是一种很简单、很快捷的方法,为了更好理解签名,这一章主要讲解apk中签名文件内容签名:每一个apk发布之前都需...

Android_apk打包签名

  • 2014年08月22日 09:39
  • 157KB
  • 下载

Android反编译apk,修改资源,打包,签名全过程

最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现各过程。 准备工作 1. 系统配置好JDk环境...

Android apk签名

  • 2015年01月08日 17:41
  • 1KB
  • 下载

android Apk签名的3种方式

  • 2015年03月27日 11:55
  • 212KB
  • 下载

Android 应用签名并发布(APK-keystore)

要想使Android应用程序在真机上运行,需要对apk文件进行签名,可以通过命令行或ADT插件方式对apk文件进行签名 一、使用命令行方式生成签名 开始”=> “运行”=> 输入“cmd”...

android apk 签名

  • 2012年11月16日 19:56
  • 2KB
  • 下载

android apk的系统签名

  • 2013年04月27日 10:56
  • 11KB
  • 下载

Android Studio 及 Eclipse 导出生成签名apk包方法

在很多时候,我们经常都是在开发应用,很少有机会去打包apk安装包,或者都是产品经理去导包。 而让我们有时候都基本忘了这个比较简单的技能给忘记了。这里就给各位献丑一下。 接下来就给Eclipse 和 A...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android apk签名算法解析
举报原因:
原因补充:

(最多只允许输入30个字)