新萄京跟apk签名有关的那些概念与命令。与apk签名有关的那些概念和命令。

一、概念篇

一、概念篇

1、消息摘要-Message Digest

1、消息摘要-Message Digest

消息摘要:在消息数据上,执行一个一边的hash函数,生成一个定位长度的hash值,这个Hash值就是信摘要,也化为数字指纹。

信摘要:在消息数据达,执行一个一派的hash函数,生成一个一定长度的hash值,这个Hash值就是信息摘要,也变为数字指纹。

消息摘要特点:

信息摘要特点:

(1)无论输入信息多丰富,计算出来的音信摘要长度总是永恒的;

(1)无论输入信息多丰富,计算出来的信息摘要长度总是永恒的;

(2)不可逆性,通过摘要无法推算出消息我;

(2)不可逆性,通过摘要无法推算出消息我;

(3)如果改动了信,摘要会发生变化(长明文生成短摘要的Hash必然会碰上);

(3)如果改动了音信,摘要会发生变化(长明文生成短摘要的Hash必然会撞击);

作用:不得不管信息之完整性,无法确保信息的防篡改。使用状况:文件下载的MD5校验。

作用:只能管信息之完整性,无法担保信息的防篡改。使用状况:文件下载的MD5校验。

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

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

 

 

2、数字签名-Signature

2、数字签名-Signature

数字签名:消息发送者用好之私钥对信息摘要加密产生的一个字符串,加密算法确保别人无法伪造生成这段字符串。这段数字字符串也是针对信息发送者发生信息真的一个得力认证,故称数字签名。

数字签名:消息发送者用好之私钥对信息摘要加密产生的一个字符串,加密算法确保别人无法伪造生成这段字符串。这段数字字符串也是对信息发送者发生信息真的一个行之有效认证,故称数字签名。

数字签名是非对如机密算法+数字摘要技术的结。

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

作用:保证信息完整性、也堪防篡改。

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

数字签名原理:信发送者将信息摘要用私钥加密,与原文一起传送给接收者。消息接收者用公钥才会用信息摘要解密,再运相同的Hash函数对吸收原文计算起一个信摘要,对比两者是否相同。基于不对如加密算法的数字签名保证防篡改,消息摘要保证完整性。

数字签名原理:信息发送者将信息摘要用私钥加密,与原文一起传送给接收者。消息接收者用公钥才会将消息摘要解密,再以同样的Hash函数对收取原文计算出一个信摘要,对比两者是否一律。基于不对如加密算法的数字签名保证防篡改,消息摘要保证完整性。

想想:为什么才对信息摘要进行数字签名?

心想:为什么只有对信息摘要进行数字签名?

加密算法普遍存在计算耗时较丰富的瓶颈,MD5、SHA等信息摘要算法则免设有拖欠问题,只针对信息摘要进行签约,可以大大减少加密内容,提升所有数字签名过程的频率。

加密算法普遍存在计算耗时可比丰富之瓶颈,MD5、SHA等消息摘要算法则非在拖欠问题,只对信息摘要进行签字,可以大大减少加密内容,提升全数字签名过程的效率。

 

 

3、数字证书-Certificate

3、数字证书-Certificate

数字证书是一个经过证书授权中心数字签名的隐含公开密钥拥有者信息与公钥的文本。

数字证书是一个由此证书授权中心数字签名的包含公开密钥拥有者信息和公钥的文书。

数字证书包含内容:

数字证书包含内容:

证件发布单位 Issuer

证发布单位 Issuer

关系有效期Validity

关系有效期Validity

信息发送方的公钥

信发送方的公钥

证明所有者 Subject

证件所有者 Subject

数字签名使用的算法

数字签名使用的算法

备考:Android
APK中的CERT.RSA是起签定的,并不需要第三在权威机构发布或者证明,用户可以于地头机械坏成这于签定证书。

备注:Android
APK中的CERT.RSA是由签署的,并不需要第三正权威机构发布还是证明,用户可以当地方机械坏成者于签署证书。

 

 

其次、Android APK两种签名方式

老二、Android APK两栽签名方式

1、jarsign和apksign工具

1、jarsign和apksign工具

jarsign —— 是Java本身由带的一个器,可以本着jar进行签字。

jarsign —— 是Java本身由带的一个器,可以本着jar进行签约。

signapk —— 是专门为Android应用程序apk进行签约的家伙。

signapk —— 是特意为Android应用程序apk进行签约的家伙。

双方的签约算法没有呀界别,主要是签时采取的公文未一致。

彼此的署名算法没有什么区别,主要是签时行使的文本未均等。

 

 

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

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

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

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

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

apksign 工具签名时采取的pk8、x509.pem文件

 

 

3、Android中凡容利用多独keystore对apk进行签约的。

3、Android中凡是允许以多只keystore对apk进行签字的。

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

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

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

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

 

 

4、apksign签名

4、apksign签名

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

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

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

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

privatekey.pk8 —— 私钥

privatekey.pk8 —— 私钥

apk中签文件:

apk中签名文件:

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

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

CERT.SF —— 保存MANIFEST.MF
的摘要值和MANIFEST.MF中各一个摘要项之SHA1连base64后记录。

CERT.SF —— 保存MANIFEST.MF
的摘要值和MANIFEST.MF中各个一个摘要项之SHA1并base64后记录。

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

CERT.RSA —— 保存了签字以及公钥证书。签名用到的摘要信息就是是CERT.SF内容。

末段保存于CERT.RSA中之凡CERT.SF的数字签名,签名使用privateKey生成,签名算法会在publicKey中定义,同时会将publicKey保存在CERT.RSA中,即CERT.RSA包含了签约以及签约用到的关系,且证书要求凡由签定的。

末段保存于CERT.RSA中的凡CERT.SF的数字签名,签名使用privateKey生成,签名算法会在publicKey中定义,同时会管publicKey保存在CERT.RSA中,即CERT.RSA包含了署名与署名用到的证书,且证书要求是起签署的。

 

 

5、系统默认debug.keystore

5、系统默认debug.keystore

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

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

Keystore name: “debug.keystore”

Keystore name: “debug.keystore”

Keystore password: “android”

Keystore password: “android”

Key alias: “androiddebugkey”

Key alias: “androiddebugkey”

Key password: “android”

Key password: “android”

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

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

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

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

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

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

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

JDK 1.7,需要丰富:-digestalg SHA1 -sigalg
MD5withRSA

 

 

6、查看签名信

6、查看签名信

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

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

翻keystore公钥证书信息: keytool -list -keystore xxx.keystore -alias
xxx -rfc

翻开keystore公钥证书信息: keytool -list -keystore xxx.keystore -alias
xxx -rfc

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

查阅apk签名信:jarsigner -verify -verbose -certs xxx.apk

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注