Android数字签名解析(一)
?一、数字签名概述
所谓"数字签名"就是通过某种password运算生成一系列符号及代码组成电子password进行签名,来取代书写签名或印章。
数字签名有两种功效:一是能确定消息确实是由发送方签名并发出来的。由于别人假冒不了发送方的签名。
二是数字签名能确
定消息的完整性。
由于数字签名的特点是它代表了文件的特征。文件假设发生改变,数字签名的值也将发生变化。
二、Android系统中数字签名的使用范围
眼下在android系统中,在两个地方使用了数据签名,一是应用程序。二是OTA升级。
应用程序中使用数字签名主要用来标识程序的唯一性。OTA升级中使用数字签名主要用来验证数据的完整性。
三、生成数字签名的方法
1、用Java中的数字签名工具keytool
签名首先要有一个keystore文件。keystore是由jdk自带的工具keytool产生。
window上生成的详细方式例如以下:
開始-〉执行->cmd->cd到你安装的jdk下的bin文件夹下,?然后输入
keytool -genkey -alias test.keystore -keyalg RSA -validity 10000 -keystore test.keystore
然后按回车首先提示输入password。 然后会确认你的password。之后会依次叫你输入相关信息如姓名,组织单位等之后就是输入
test.keystore?主password(如果和keystorepassword同样。按回车)我在这里设和keystore同样,之后你就会在bin文件夹下找到生成
的test.keystore。
相关參数意义例如以下:
-alias?后跟的是别名, 这里是test.keystore
-keyalg是加密方式这里是RSA
-validity是有效期这里是10000天
-keystore就是要生成的keystore的名称,这里是test.keystore
keystore生成后。如今能够进行签名了, 如今把你要进行签名的apk放到一个当前文件夹下。然后利用jdk提供的工具
jarsigner.exe进行签名,详细操作例如以下:
jarsigner -verbose -keystore test.keystore -signedjar new.apk?test.apk test.keystore
2、在源代码下进行签名
Android源代码文件夹development\tools下有make_key脚本, ?用来生成一个密钥对。 这个密钥对与keytool生成的key在形式上不
一样,但内容和作用是一致的。
生成公钥:
openssl genrsa -3 -outtestkey.pem 2048
转换成X509证书格式:
openssl req -new -x509 -key testkey.pem -out?testkey.x509.pem -days 10000-subj ‘xx’
生成私钥:
openssl pkcs8 -in testkey.pem-topk8 -outform DER -out testkey.pk8?–nocrypt
APK签名命令:
java -jar signapk publickey.x509[.pem]privatekey.pk8 input.apk output.apk
升级包进行签名: (注:理论上用keytool应该也能对升级包进行签名。但眼下我还不知道详细步骤)
java -jar signapk –w publickey.x509[.pem]privatekey.pk8 input.zip output.zip
原文地址:https://www.cnblogs.com/mqxnongmin/p/10605194.html
时间: 2024-11-29 03:37:54
Android数字签名解析(一)的相关文章
在Android数字签名解析(一)中,介绍了android进行签名的两种方式,当中用密钥对进行签名用到了signapk.jar这个java库. 以下我们就看看signapk签名实现过程,signapk的源代码在build/tools/signapk/下. 一.生成MANIFEST.MF文件 //对apk包中的每一个文件(非目录和非签名文件),生成SHA1的摘要信息.再对这个信息进行Base64编码. Manifest manifest = addDigestsToManifest(inputJa
在刚才开始学习android数字签名的相关知识点的时候,被资料中出现的keystore.x509.密钥对.debug.keystore弄的晕头 转向,经过一段时间的了解,总算明白一些. 一.make_key脚本生成密钥对 android源码中自带的工具make_key(development/tools/目录下)可以用来生成RSA密钥对. ./make_key test '/C=CN/ST=SH/L=SH/O=TEST/OU=TEST/CN=TEST' 运行以上命令将生成密钥对test.pk8和
package com.practice.json; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import android.app.Activity; import android.os.Bundle; import android.util.Log; public class JsonDemo extends Activity { /*http://www.hui
在XML解析和使用原始XML资源中都涉及过对XML的解析,之前使用的是 DOM4J和 XmlResourceParser 来解析的.本文中将使用XmlPullParser来解析,分别解析不同复杂度的test1.xml.test2.xml.test3.xml.代码如下: MainActivity: package com.home.xmlparsetest; import java.io.IOException; import java.io.InputStream; import java.ut
1.简介 json是android与服务器通信过程中常用的数据格式,例如,如下是一个json格式的字符串: {"address":"Nanjing","name":"NUPT","students":[{"name":"stu1","id":"10000","age":20},{"name"
这是 volley 的第四篇 blog 了,写完这篇,volley 的大部分用法也都算写了一遍,所以暂时不会写 volley 的文章了,如果想看我前面写的文章,可以点这里 Android volley 解析(三)之文件上传篇 为什么要用缓存 我们知道,当客户端在请求网络数据的时候,是需要消耗流量的,特别是对于移动端用户来说,对于流量的控制要求很高.所以在做网络请求的时候,如果对数据更新要求不是特别高,往往都会用到缓存机制,一方面能减少对服务端的请求,控制流量:另一方面,当客户端在没有网络的情况下
XML 常用的三种解析方式: DOM: 全部加载到内存,生成一个树状结构,占用内存比较大. SAJ: 采用事件驱动,速度快,效率高,不支持回退. PULL:也是采用事件驱动,语法简洁. 步骤: 1. 创建XML 解析器:XmlPullParser parser = Xml.newPullParser(); 2. 配置解析器:parser.setInput(is, "utf-8");// 参数为 xml 文件输入流 和 编码方式. 3. 根据事件进行解析. int type = pars
转载请标明出处:一片枫叶的专栏 上一篇文章中我们解说了android中的异步消息机制. 主要解说了Handler对象的使用方式.消息的发送流程等.android的异步消息机制是android中多任务处理的基础,Handler是整个android应用层体系异步消息传递的基础组件,通过对Handler源代码的解析的解析相信大家对android中的异步消息机制有了一个大概的了解.很多其它关于android中的异步消息机制的知识可參考我的:android源代码解析之(二)–>异步消息机制 android
上一篇文章中,讲了 Volley 的 get 和 post 请求,并且对 volley 的基本使用和基本分析做了讲解,而这篇 blog 将讲解用 volley 实现表单的提交,在看这篇文章之前,如果对 Volley 基本知识不够了解的朋友,可以移驾前往Android Volley解析(一)之GET.POST请求篇 表单提交的数据格式 要实现表单的提交,就要知道表单提交的数据格式是怎么样,这里我从某知名网站抓了一条数据,先来分析别人提交表单的数据格式. 数据包: Connection: keep-