在刚才開始学习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, 能够參考百度百科

fr=aladdin">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数字签名解析(三)的更多相关文章

  1. Android数字签名解析(二)

    在Android数字签名解析(一)中,介绍了android进行签名的两种方式,当中用密钥对进行签名用到了signapk.jar这个java库. 以下我们就看看signapk签名实现过程,signapk ...

  2. Android数字签名解析(一)

     一.数字签名概述 所谓"数字签名"就是通过某种password运算生成一系列符号及代码组成电子password进行签名,来取代书写签名或印章. 数字签名有两种功效:一是能确定消息 ...

  3. android中解析文件的三种方式

    android中解析文件的三种方式     好久没有动手写点东西了,最近在研究android的相关技术,现在就android中解析文件的三种方式做以下总结.其主要有:SAX(Simple API fo ...

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

    前言:对xstream不理解的请看: android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 android XMl 解析神奇xs ...

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

    转载请标明出处:一片枫叶的专栏 上一篇文章中我们解说了android中的异步消息机制. 主要解说了Handler对象的使用方式.消息的发送流程等.android的异步消息机制是android中多任务处 ...

  6. android XMl 解析神奇xstream 六: 把集合list 转化为 XML文档

    前言:对xstream不理解的请看: android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 android XMl 解析神奇xs ...

  7. android XMl 解析神奇xstream 五: 把复杂对象转换成 xml ,并写入SD卡中的xml文件

    前言:对xstream不理解的请看: android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 android XMl 解析神奇xs ...

  8. android XMl 解析神奇xstream 四: 将复杂的xml文件解析为对象

    前言:对xstream不理解的请看: android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 android XMl 解析神奇xs ...

  9. Android动画解析--XML

    动画类型 Android的animation由四种类型组成 XML中 alpha 渐变透明度动画效果 scale 渐变尺寸伸缩动画效果 translate 画面转换位置移动动画效果 rotate 画面 ...

随机推荐

  1. java实现电脑远程控制完整源代码(转)

    Java JDK1.4 的Robot对象,该对象可以完成屏幕图像截取操作,控制鼠标,键盘,如此便可以轻而易举地实现远程服务器的控制.本文向大家介绍如何用Java Robot对象实现远程服务器的控制,并 ...

  2. kinit manual

    Name kinit - obtain and cache Kerberos ticket-granting ticket Synopsis kinit [-V] [-l lifetime] [-s  ...

  3. Android经常使用UI组件 - TextView

    TextView是Android里面用的最多的UI组件,一般使用在须要显示一些信息的时候,其不能输入,仅仅能初始设定或者在程序中改动. 实例:TextViewDemo 执行效果: 代码清单: 布局文件 ...

  4. stm32之GPIO(二)

    输入上拉:当IO口作为输入时,比如按键输入,而按键是与地连接,按下时为低电平,则没按下时该IO口应为高电平,上拉即是该IO口通过一个电阻与电源相连,则没按下时为高电平,按下即为低电平. 输入下拉:同理 ...

  5. iOS开发笔记--使用blend改变图片颜色

    最近对Core Animation和Core Graphics的内容东西比较感兴趣,自己之前也在这块相对薄弱,趁此机会也想补习一下这块的内容,所以之后几篇可能都会是对CA和CG学习的记录的文章. 在应 ...

  6. Microsoft Visual Studio 发展历史

    Microsoft Visual Studio(简称VS)是美国微软公司的开发工具包系列产品.VS是一个基本完整的开发工具集,它包括了整个软件生命周期中所需要的大部分工具,如UML工具.代码管控工具. ...

  7. 设计模式(四)原型模式Prototype(创建型)

      设计模式(四)原型模式Prototype(创建型) 1.   概述 我们都知道,创建型模式一般是用来创建一个新的对象,然后我们使用这个对象完成一些对象的操作,我们通过原型模式可以快速的创建一个对象 ...

  8. wifi密码破解方法总结(含破解软件下载链接)

    眼下网上流行有非常多无线password的破解方法,总结起来最有用的还是这两种:第一种是Wirelessnetview+WinAirCrackPack软件组合,这个方法简单方便:另外一种就是大家熟悉的 ...

  9. MSSql跨数据库查询

    select d.PostTime ,l.name from DatabaseLog d ,lumigent.dbo.test l 一定要加.dbo,不加dbo不行啊 select * from lu ...

  10. RadioButton控件

    前台代码: <div> <asp:RadioButton ID="RadioButton1" runat="server" GroupName ...