美学原理与apk签名有关的那多少个概念与命令

一、概念篇

1、信息摘要-Message Digest

音讯摘要:在音讯数据上,执行一个一方面的hash函数,生成一个固定长度的hash值,这一个Hash值就是音讯摘要,也变成数字指纹。

音讯摘要特点:

(1)无论输入信息多少长度,总括出来的音讯摘要长度总是永恒的;

(2)不可逆性,通过摘要不能推算出音讯我;

(3)假使改动了音讯,摘要会暴发变化(长明文生成短摘要的Hash必然会磕磕碰碰);

作用:唯其如此保证音讯的完整性,无法保证信息的防篡改。使用处境:文件下载的MD5校验。

信息摘要算法:MD5、SHA-0、SHA-1

 

2、数字签名-Signature

数字签名:音信发送者用自己的私钥对音讯摘要加密爆发的一个字符串,加密算法确保别人无法伪造生成这段字符串。这段数字字符串也是对音讯发送者暴发信息真实的一个得力认证,故称数字签名。

数字签名是非对称机密算法+数字摘要技术的组合。

作用:保证音信完整性、也可以防篡改。

数字签名原理:消息发送者将音讯摘要用私钥加密,与原文一起传送给接收者。消息接收者用公钥才能将消息摘要解密,再拔取同一的Hash函数对收到原文总括发生一个信息摘要,相比两者是否一律。基于非对称加密算法的数字签名保证防篡改,音信摘要保证完整性。

合计:为什么只对音信摘要举办数字签名?

加密算法普遍存在总括耗时较长的瓶颈,MD5、SHA等新闻摘要算法则不存在该问题,只针对音信摘要进行签约,可以大大收缩加密内容,提升整个数字签名过程的效能。

 

3、数字证书-Certificate

数字证书是一个经证书授权核心数字签名的含有公开密钥拥有者信息以及公钥的文件。

数字证书包含内容:

证书揭橥单位 Issuer

证件有效期Validity

音讯发送方的公钥

注解所有者 Subject

数字签名使用的算法

备考:Android
APK中的CERT.RSA是自签约的,并不需要第三方权威机构发布如故评释,用户可以在本土机械生成这么些自签定证书。

 

二、Android APK两种签名情势

1、jarsign和apksign工具

jarsign —— 是Java本身自带的一个工具,可以对jar举行签字。

signapk —— 是专门为Android应用程序apk举行签约的工具。

双面的签名算法没有怎么分别,主假使签约时选用的文书不同等。

 

2、keystore和pk8、x509.pem的区别

jarsian
工具签名时使用的是keystore文件。Eclipse的Debug包默认使用jarsign工具签名。

apksign 工具签名时行使的pk8、x509.pem文件

 

3、Android中是允许使用多少个keystore对apk举办签约的。

jarsign签名文件:文件后缀名是签约算法,文件名是keystone别名。

apksign签名之后的apk中的META-INF写死了是CERT的名字。

 

4、apksign签名

eg: apksign publickey.x509.pem privatekey.pk8 input.apk output.apk

publickey.x509.pem ——包含证书和证书链,包含了公钥和加密算法;

privatekey.pk8 —— 私钥

apk中签名文件:

MANIFEST.MF —— 包含了input.jar所有文件内容的摘要值

CERT.SF —— 保存MANIFEST.MF
的摘要值以及MANIFEST.MF中每一个摘要项的SHA1并base64后记录。

CERT.RSA —— 保存了署名和公钥证书。签名用到的摘要新闻就是CERT.SF内容。

最后保存在CERT.RSA中的是CERT.SF的数字签名,签名使用privateKey生成,签名算法会在publicKey中定义,同时会把publicKey保存在CERT.RSA中,即CERT.RSA包含了签名和签名用到的证件,且证书要求是自签署的。

 

5、系统默认debug.keystore

(1)默认debug.keystore音信如下:

Keystore name: “debug.keystore”

Keystore password: “android”

Key alias: “androiddebugkey”

Key password: “android”

CN: “CN=Android Debug,O=Android,C=US”

(2)使用自带debug.keystore重新签名APK文件。

jarsigner  -digestalg SHA1 -sigalg MD5withRSA -keystore debug.keystore
-storepass android -keypass android xxx.apk androiddebugkey

JDK 1.7,需要加上:-digestalg SHA1 -sigalg
MD5withRSA

 

6、查看签名音讯

查看keystore信息:keytool -list -keystore xxx.keystore -alias xxx -v

查看keystore公钥证书音讯: keytool -list -keystore xxx.keystore -alias
xxx -rfc

翻看apk签名信息:jarsigner -verify -verbose -certs xxx.apk