C++与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