夜鹰教程网-程序员的加油站
 当前位置:文章中心 >> Android/移动互联网/物联网/
安卓apk签名常见命令
夜鹰教程网 来源:www.yyjcw.com 日期:2019-1-4 13:13:31
安卓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


复制链接 网友评论 收藏本文 关闭此页
上一条: iOS 关于退出键盘两种方法和避免遮…  下一条: 把activity当成dialog使用
夜鹰教程网成立于2008年,目前已经运营了将近 13 年,发布了大量关于 html5/css3/C#/asp.net/java/python/nodejs/mongodb/sql server/android/javascript/mysql/mvc/easyui/vue/echarts原创教程。 我们一直都在坚持的是:认证负责、一丝不苟、以工匠的精神来打磨每一套教程,让读者感受到作者的用心。我们默默投入的时间,确保每一套教程都是一件作品,而不是呆板的文字和视频! 目前我们推出在线辅导班试运营,模式为一对一辅导,教学工具为QQ。我们的辅导学科包括 java 、android原生开发、webapp开发、商城开发、C#和asp.net开发,winform和物联网开发、web前端开发,但不仅限于此。 普通班针对的是国内学员,例如想打好基础的大学生、想转行的有志青年、想深入学习的程序员、想开发软件的初学者或者业余爱好者等。 就业办针对即将毕业上岗的大四学生,或者打算转行的初级开发工程师。 留学生班针对的是在欧美、加拿大、澳洲、日本、韩国、新加坡等地留学的中国学子,目的是让大家熟练地掌握编程技能,按时完成老师布置的作业,并能顺利地通过考试。 详细咨询QQ:1416759661   夜鹰教程网  基于角色的权限管理系统(c-s/b-s)。
  夜鹰教程网  基于nodejs的聊天室开发视频教程
  夜鹰教程网  Git分布式版本管理视频教程
  夜鹰教程网  MVC+EasyUI视频教程
  夜鹰教程网  在线考试系统视频教程
  夜鹰教程网  MongoDB视频教程。
  夜鹰教程网 Canvas视频教程
  夜鹰教程网 报表开发视频教程
  热点推荐
在Struts 2中使用JSON Ajax支持
解决JSP中使用request乱码问题
JSP+JavaScript打造二级级联下拉菜…
Tomcat中文手册(1)
JSP及Servlet中遇到的多线程同步
详解:JSP和Servlet中的绝对路径和…
JSP Struts之HTML标签库详解
自定义JSP标签
JSP中的include指令
errorPage设置方法--JSP
JSP 国际化-格式化货币和日期
九个隐含对象使用总结JSP的
Tomcat中文手册(2)
tomcat6关于EL表达式的一个错误
jsp分页技术代码
  最近更新
iOS 关于退出键盘两种方法和避免遮…
安卓apk签名常见命令
把activity当成dialog使用
如何选择APP开发框架
Layout _width ,Layout_height和…
Android调用百度地图使用时出现in…
安卓刷机术语
android端实现断点续传功能
利用TCP/IP实现Android客户端与服…
Invalid project description ove…
推荐使用的meta标签
手机网站用Bootstrap还是jQuery M…
如何让手机访问PC网站自动跳转到手…
提升HTML5的性能体验系列之一 避免…
Android和IOS 字体该做多大合适?…

关于我们 | 网站建设 | 技术辅导 | 常见问题 | 联系我们 | 友情链接

夜鹰教程网 版权所有 www.yyjcw.com All rights reserved 备案号:蜀ICP备08011740号3