App签名

Android App签名的目的是确保App的安装包来自于原创的作者,且App没有被篡改。Android手机是如何设别App来自于原创的作者且没有被篡改呢?请看App签名以及验签原理。

App签名原理

下图分别是App安装文件在签名前后META-INF目录的对比。
签名前:

签名后:

显然,签名之后,META-INF目录下MANIFEST.MF文件变大了,同时新增了CERT.SF和CERT.RSA两个文件。其实,App的签名过程主要做了三件事:

  1. 遍历App安装文件的所有子目录和文件,计算每个文件的SHA1摘要,然后用base64进行编码,将编码后的字符串和文件的路径存入MANIFEST.MF文件,如下图:

  2. 计算MANIFEST.MF文件的SHA1摘要,base64编码之后存入CERT.SF文件的SHA1-Digest-Manifest字段中;遍历MANIFEST.MF文件的所有项,计算每项的SHA1摘要,base64编码之后存入CERT.SF文件,如下图:

  3. 用私钥计算出CERT.SF签名, 然后将签名以及包含公钥信息的数字证书写入 CERT.RSA 。
    至此,App的签名即算完成。手机是如何对签名后的App进行身份和完成性校验的呢?请看下面的App签名验证过程

App验签原理

Android手机在安装App的时候,会对App的签名进行验证。只有签名验证通过,才能安装在手机上。验签过程和签名过程对应,分如下几步:

  1. 计算App里每个文件的SHA1摘要并进行base64编码,将结果与MANIFEST.MF文件中的对应项进行比对,确认是否相同。只有所有的文件比对结果都相同,则此环节验证通过;否则,验签失败,安装终止。
  2. 遍历MANIFEST.MF文件,计算每项的SHA1摘要并进行base64编码,将结果与CERT.SF文件中的对应项进行比对,确认是否相同。只有所有的文件比对结果都相同,则此环节验证通过;否则,验签失败,安装终止。
  3. 验证CERT.SF文件的签名信息和CERT.RSA中的内容是否相同。相同,则签名验证通过;否则,签名失败,安装终止。
    通过上面的三部,即完成了App的验签过程。第1步验证App的所有子文件是否被篡改;第2步验证MANIFEST.MF文件是否被篡改;第3步验证CERT.SF文件是否被篡改

总结

本位介绍了Android App的签名和验签原理,核心思想是签名的时候生成MANIFEST.MF、CERT.SF和CERT.RSA文件,记录App的文件摘要和签名信息;验签的时候,将安装包里实际的文件信息与MANIFEST.MF、CERT.SF和CERT.RSA文件进行比对,以确认签名文件和App是否被篡改。只有验签通过的App,才能安装在手机上。

Android App签名的那些事相关推荐

  1. Android App签名(证书)校验过程源码分析

      Android App安装是需要证书支持的,我们在Eclipse或者Android Studio中开发App时,并没有注意关于证书的事,也能正确安装App.这是因为使用了默认的debug证书.在A ...

  2. android app签名方法

    1.生成签名文件 在android studio 里操作如下: 填完即可. 会产生这个签名文件. 2.签名app 到jdk的bin文件夹下输入下面命令: jarsigner -verbose -key ...

  3. android app签名详解

    本文及文中图片转自:https://mp.weixin.qq.com/s?__biz=MzIwMzYwMTk1NA==&mid=2247493825&idx=1&sn=e926 ...

  4. Android App签名

    Andriod应用程序如果要在手机或模拟器上安装,必须要有签名! 1.签名的意义 为了保证每个应用程序开发商合法ID,防止部分开放商可能通过使用相同的Package Name来混淆替换已经安装的程序, ...

  5. Android APP签名和签名等信息查看

    最近在写学校的创新项目,是一个基于定位的签到系统,需要用到百度地图,百度地图SDK的使用需要申请身份,获取key值等,过程中需要提供应用的签名,下面介绍一下签名的使用. 1. 为什么要签名? 发送者的 ...

  6. Android App签名和权限

    签名简介 在Android系统中,所有安装到系统的应用程序都必有一个Android数字证书,此数字证书用于标识应用程序的作者和在应用程序之间建立信任关系,如果一个permission的protecti ...

  7. Android APP签名找回终极版

    我们在开发项目的时候,可能会碰到在打包App的时候,忘记password 或者alias,这时候可以通过一下密码找回工具和步骤完成密码的找回. 具体步骤如下: 一.下载工具:AndroidKeysto ...

  8. 为你的android App实现自签名的ssl证书

    为你的android App实现自签名的ssl证书(https) 最近公司项目用到https的接口形式,对于一般的网络请求 我们用的是http://******      使用的是 代码用来打开一个  ...

  9. android app的签名,Android APP的签名

    Android APP的签名 Android项目以它的包名作为唯一的标识,如果在同一部手机上安装两个包名相同的APP,后者就会覆盖前面安装的应用.为了避免Android APP被随意覆盖,Androi ...

最新文章

  1. ID--HANDLE--HWND三者之间的互相转换
  2. Native SBS for Android
  3. pytorch 维度练习
  4. 图解Oracle常用SQL语句
  5. Windows Server 2003活动目录:管理特征
  6. 计算机二级c语言考点分析,计算机二级C语言考点分析.doc
  7. django建表报错
  8. objective-c(初始化)
  9. 阶段3 2.Spring_03.Spring的 IOC 和 DI_11 set方法注入
  10. Go (Golang) 工具之单元测试 go-junit-report | go的单元测试
  11. 班级主页效果图html,DW制作网页|html静态页面|班级网页素材|蝶恋花班级主页网站...
  12. 哇哦,教你如何使用jumpserver堡垒机添加windows资产
  13. Map.Entry和Map中的map.keySet()、map.entrySet()详解
  14. 微信蓝牙设备服务器,微信又更新了 支持连接蓝牙设备
  15. SKU与SPU的区别
  16. Django 新建自定义用户后无法创建表的问题
  17. Linux(redhat7.2)本地yum源配置
  18. 高通开发系列 - System之FOTA和DFOTA升级记录
  19. 02_Windows和VMware下的Linux共享文件的实现
  20. (16)调度代码周期性运行

热门文章

  1. bluetooth pdf_这个pdf软件很okk,速来get!
  2. html 网页地图集制作ECHARTS,在页面使用echarts的地图(解决地图不完整)
  3. 国际清算银行称:央行数字货币可能导致银行挤兑
  4. vbox虚拟机上装了银行的网络认证软件后不能正常使用的问题
  5. 第一集 DLNA 白話文介紹
  6. 万邦微信公众号根据关键词取文章列表 API 返回值说明
  7. day25:组合总和,电话号码的字母组合
  8. Mint家族迎来了“瑟瑞娜”
  9. 深圳小汽车车牌竞拍价格预测
  10. 通达信上涨回调选股公式,选出二次走强的标的