Android数字签名解析(三)

在刚才开始学习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和test.x509.pem。该命令中, /C表示“Country
Code”,/ST表示“State orProvince”,/L表示“City or

Locality”,/O表示“Organization”,/OU表示“Organizational Unit”,/CN表示“Name”。

make_key脚本中关键代码如下:

</pre></div></blockquote><pre name="code" class="html">( openssl genrsa -f4 2048 | tee ${one} > ${two} ) &
openssl req -new -x509 -sha1 -key ${two} -out $1.x509.pem   -days 10000 -subj "$2" &
if [ "${password}" == "" ]; then
  echo "creating ${1}.pk8 with no password"
  openssl pkcs8 -in ${one} -topk8 -outform DER -out $1.pk8 -nocrypt
else
  echo "creating ${1}.pk8 with password [${password}]"
  echo $password | openssl pkcs8 -in ${one} -topk8 -outform DER -out $1.pk8     -passout stdin

其实主要利用了openssl来实现, openssl是一个强大的命令,要了解openssl, 可以参考百度百科http://baike.baidu.com/view/300712.htm?fr=aladdin

二、keytool生成密钥

Android数字签名解析(一)中介绍过用keytool生成密钥的方法,

keytool -genkey -alias test.keystore -keyalg RSA -validity 10000 -keystore test.keystore

keytool为JDK中自带的工具,一些第三方的应用开发者,由于没有Android源码环境, 所以会采用keytool来生成密钥。

三、make_key生成的密钥对转换为keystore中的密钥

1、把pkcs8格式的私钥转换为pkcs12格式:

openssl pkcs8 -in test.pk8 -inform DER -outform PEM -out test.priv.pem -nocrypt

2、生成pkcs12格式的密钥文件:

openssl pkcs12 -export -in test.x509.pem -inkey test.priv.pem -out test.pk12 -name testkey

3、生成keystore:

keytool -importkeystore -deststorepass android -destkeypass android -destkeystore test.keystore -srckeystore
 shared.pk12

srcstoretype PKCS12 -srcstorepass android -alias testkey

这样就生成了一个名为test.keystore的keystore文件,就可以用这个文件对apk签名。

四、keystore中的密钥转换为密钥对

1、keystore文件转换为pkcs12格式

keytool -importkeystore -srckeystore test.keystore -destkeystore test.p12 -srcstoretype JKS -   deststoretype PKCS12

2、dump pkcs12 文件

openssl pkcs12 -in test.p12 -nodes -out test.rsa.pem

3、以文本形式打开test.rsa.pem,复制“BEGIN
CERTIFICATE”  “END CERTIFICATE”之间的内容到一个文件

test.x509.pem, 即公钥

4、复制 “BEGIN RSA PRIVATE KEY”“END RSA PRIVATE KEY” 之间的内容到一个文件test.rsa.pem,然后运行如下命令

openssl pkcs8 -topk8 -outform DER -in     test.rsa.pem -inform PEM -out test.pk8 -nocrypt

这样就test.x509.pem和test.pk8就生成了.

Android数字签名解析(三)

时间: 2024-08-12 20:40:12

Android数字签名解析(三)的相关文章

Android数字签名解析(二)

在Android数字签名解析(一)中,介绍了android进行签名的两种方式,当中用密钥对进行签名用到了signapk.jar这个java库. 以下我们就看看signapk签名实现过程,signapk的源代码在build/tools/signapk/下. 一.生成MANIFEST.MF文件 //对apk包中的每一个文件(非目录和非签名文件),生成SHA1的摘要信息.再对这个信息进行Base64编码. Manifest manifest = addDigestsToManifest(inputJa

Android数字签名解析(一)

?一.数字签名概述 所谓"数字签名"就是通过某种password运算生成一系列符号及代码组成电子password进行签名,来取代书写签名或印章. 数字签名有两种功效:一是能确定消息确实是由发送方签名并发出来的.由于别人假冒不了发送方的签名. 二是数字签名能确 定消息的完整性. 由于数字签名的特点是它代表了文件的特征.文件假设发生改变,数字签名的值也将发生变化. 二.Android系统中数字签名的使用范围 眼下在android系统中,在两个地方使用了数据签名,一是应用程序.二是OTA升级

Android源代码解析之(三)--&amp;gt;异步任务AsyncTask

转载请标明出处:一片枫叶的专栏 上一篇文章中我们解说了android中的异步消息机制. 主要解说了Handler对象的使用方式.消息的发送流程等.android的异步消息机制是android中多任务处理的基础,Handler是整个android应用层体系异步消息传递的基础组件,通过对Handler源代码的解析的解析相信大家对android中的异步消息机制有了一个大概的了解.很多其它关于android中的异步消息机制的知识可參考我的:android源代码解析之(二)–>异步消息机制 android

Android volley 解析(三)之文件上传篇

前面我们讲了如何通过 volley 实现表单的提交,而这篇文章跟上一篇衔接很大,如果没有看上一篇 blog 的朋友,建议先去看看 Android Volley解析(二)之表单提交篇 因为文件上传实质就是表单的提交,只不过它提交的数据包含文件类型,接下来还是按照表单提交的套路来分析. 数据格式 这里我们通过图片上传的案例来分析,其他文件也是同样的实现方式:以下是我在传图网传图时,上传的数据格式,先来分析一下 POST http://chuantu.biz/upload.php HTTP/1.1 H

android XMl 解析神奇xstream 三: 把复杂对象转换成 xml

前言:对xstream不理解的请看: android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 android XMl 解析神奇xstream 二: 把对象转换成xml 1.JavaBeen package com.android10; public class Person { String pName ; String pAge ; public String getpName() { return pName; } pub

android 中解析XML的方法(转)

在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

Android volley 解析(四)之缓存篇

这是 volley 的第四篇 blog 了,写完这篇,volley 的大部分用法也都算写了一遍,所以暂时不会写 volley 的文章了,如果想看我前面写的文章,可以点这里 Android volley 解析(三)之文件上传篇 为什么要用缓存 我们知道,当客户端在请求网络数据的时候,是需要消耗流量的,特别是对于移动端用户来说,对于流量的控制要求很高.所以在做网络请求的时候,如果对数据更新要求不是特别高,往往都会用到缓存机制,一方面能减少对服务端的请求,控制流量:另一方面,当客户端在没有网络的情况下

Android xml 解析

XML 常用的三种解析方式: DOM: 全部加载到内存,生成一个树状结构,占用内存比较大. SAJ: 采用事件驱动,速度快,效率高,不支持回退. PULL:也是采用事件驱动,语法简洁. 步骤: 1. 创建XML 解析器:XmlPullParser parser = Xml.newPullParser(); 2. 配置解析器:parser.setInput(is, "utf-8");// 参数为 xml 文件输入流 和 编码方式. 3. 根据事件进行解析. int type = pars

Android Volley解析(二)之表单提交篇

上一篇文章中,讲了 Volley 的 get 和 post 请求,并且对 volley 的基本使用和基本分析做了讲解,而这篇 blog 将讲解用 volley 实现表单的提交,在看这篇文章之前,如果对 Volley 基本知识不够了解的朋友,可以移驾前往Android Volley解析(一)之GET.POST请求篇 表单提交的数据格式 要实现表单的提交,就要知道表单提交的数据格式是怎么样,这里我从某知名网站抓了一条数据,先来分析别人提交表单的数据格式. 数据包: Connection: keep-