您的位置:首页 > 移动开发 > Android开发

android签名机制1

2015-01-23 15:21 148 查看
1.为什么用签名机制?如果不签名呢?

2.平台签名?签名有很多种么?

3.如何区别签名过和没签名的apk?

4.如何签名?

5.了解加密、数字摘要、数字签名和数字证书

android中所有运行在设备上的应用都必须要签名,这是系统提供的一种安全认证机制。

下面以问答形式来自我认识下,后面在根据部分内容来进一步研究:

1.为什么用签名机制?如果不签名呢?

为了防止app被反编译替换原有的程序,如果有相同包名的应用存在,新的apk则不能安装在设备上。 就算被反编译,在没有原有私钥的情况,重新签名生成的apk和原来的apk的标志是不同的。如此,被修改的apk如果安装在原来的设备上,则会提示:

Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES]

如果不签名呢?

直接安装到设备上,则也提示:





从上面可以有个很简易的认知,如果不签名或者签名不对,则不能安装在设备上。

如果应用androidmenifast.xml中加了android:sharedUserId="android.uid.system"时,要用平台签名,否则提示:





更多安装异常可以查找相关信息。

2.平台签名?签名有很多种么?

有很多种。在android源码目录build\target\product\security,有如下几种签名密钥。





*.pk8表示的是private key---私钥

*.x509.pem理解为公钥

*.pk8表示的是private key---私钥

*.x509.pem理解为公钥

这里的platform.*即为平台签名的私钥和公钥,加密方式是非对称加密。

从上图可以看出有好几种的签名,4种具体表示可参考当前目录下的README.

?
从shareed签名,可以联想到:

当A应用需要用到B应用的共享数据时,他们的android:sharedUserId="xxx"需要一致,签名也需要一致
注:当应用工程的Android.mk中未指定LOCAL_CERTIFICATE时,源码编译则使用默认testkey

3.如何区别签名过和没签名的apk?

注:apk支持多次签名,以最后一次为准

apk是个zip包格式,这里就有个很简单直观的方式---用压缩程序方式打开apk,看下图:





签名过的apk包里有个META-INF文件夹,里面就是对各个资源文件用SHA1加密后的值。

4.如何签名?

loop android签名机制(2)——如何签名

5.了解加密、数字摘要、数字签名和数字证书





参考:/article/6106191.html

问题待补充..

参考: http://developer.android.com/tools/publishing/app-signing.html

原作者:http://my.oschina.net/blackylin/blog/176851

复制去Google翻译翻译结果
pp-signing.ht
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: