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
  • 156KB
  • 下载

Android apk签名

通过Eclipse对Android项目生成APK数字签名

Android APK数字签名作用    1) App升级。 使用相同签名的升级软件可以正常覆盖老版本的软件,否则系统比较发现新版本的签名证书和老版本的签名证书不一致,不会允许新版本安装成功的。  ...

android Apk签名的3种方式

  • 2015-03-27 11:55
  • 212KB
  • 下载

android apk数字签名生成

  • 2015-12-01 21:06
  • 17KB
  • 下载

[Android]使用platform密钥来给apk文件签名的命令

1.使用platform密钥对apk进行签名   1.1.进入/build/target/product/security,找到【platform.pk8】和【platform.x509....

android apk 签名

android apk的系统签名

  • 2013-04-27 10:56
  • 11KB
  • 下载

android apk签名(为什么 如何做 验证)

这篇文章其实就是根据自己的疑问然后结合多个文章结合成的 文章引用: http://www.cnblogs.com/not-code/archive/2011/05/15/2047057.h...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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