Android数字签名解析(三)
在刚才開始学习android数字签名的相关知识点的时候,被资料中出现的keystore、x509、密钥对、debug.keystore弄的晕头
转向。经过一段时间的了解,总算明确一些。
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数字签名解析(三)的更多相关文章
- Android数字签名解析(二)
在Android数字签名解析(一)中,介绍了android进行签名的两种方式,当中用密钥对进行签名用到了signapk.jar这个java库. 以下我们就看看signapk签名实现过程,signapk ...
- Android数字签名解析(一)
一.数字签名概述 所谓"数字签名"就是通过某种password运算生成一系列符号及代码组成电子password进行签名,来取代书写签名或印章. 数字签名有两种功效:一是能确定消息 ...
- android中解析文件的三种方式
android中解析文件的三种方式 好久没有动手写点东西了,最近在研究android的相关技术,现在就android中解析文件的三种方式做以下总结.其主要有:SAX(Simple API fo ...
- android XMl 解析神奇xstream 三: 把复杂对象转换成 xml
前言:对xstream不理解的请看: android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 android XMl 解析神奇xs ...
- Android源代码解析之(三)-->异步任务AsyncTask
转载请标明出处:一片枫叶的专栏 上一篇文章中我们解说了android中的异步消息机制. 主要解说了Handler对象的使用方式.消息的发送流程等.android的异步消息机制是android中多任务处 ...
- android XMl 解析神奇xstream 六: 把集合list 转化为 XML文档
前言:对xstream不理解的请看: android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 android XMl 解析神奇xs ...
- android XMl 解析神奇xstream 五: 把复杂对象转换成 xml ,并写入SD卡中的xml文件
前言:对xstream不理解的请看: android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 android XMl 解析神奇xs ...
- android XMl 解析神奇xstream 四: 将复杂的xml文件解析为对象
前言:对xstream不理解的请看: android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 android XMl 解析神奇xs ...
- Android动画解析--XML
动画类型 Android的animation由四种类型组成 XML中 alpha 渐变透明度动画效果 scale 渐变尺寸伸缩动画效果 translate 画面转换位置移动动画效果 rotate 画面 ...
随机推荐
- wchar_t是内置还是别名(亲测有效:wchar_t在windows下是16位整数的别名,在linux等平台下是32位整数的别名。MSVC2008开始默认是/Zc:wchar_t)
接前一篇C++ ABI之名字改编(以Qt为例),继续看看C++名字改编相关的问题. 问题 MSVC 有一对选项/Zc:wchar_t- 与 /Zc:wchar_t控制wchar_t 于是 wchar_ ...
- 转: c++继承中的内存布局
英文原文: http://www.openrce.org/articles/files/jangrayhood.pdf 翻译: http://blog.csdn.net/jiangyi711/arti ...
- codeblocks快捷键及设置
==日常编辑== • 按住Ctrl滚滚轮,代码的字体会随你心意变大变小.• 在编辑区按住右键可拖动代码,省去拉(尤其是横向)滚动条之麻烦:相关设置:Mouse Drag Scrolling.• Ctr ...
- poj 3053 Fence Repair(优先队列)
题目链接:http://poj.org/problem?id=3253 思路分析:题目与哈夫曼编码原理相同,使用优先队列与贪心思想:读入数据在优先队列中,弹出两个数计算它们的和,再压入队列中: 代码如 ...
- [Unity 3D] Unity 3D 里的碰撞检测
Unity 3D里两个碰撞体之间发生碰撞可以用OnCollision族函数和OnTrigger族函数来获知和处理.Unity官方给出了两张可发生碰撞的组合表: Collision detection ...
- ViewPager引导页效果实例源码
首先大家先找到本地的sdk,然后找到Google提供的API,具体查找方法如下:sdk——>docs——>index.html——>develop——>training——&g ...
- 【DWR】Annotation入门
DWR简介:http://baike.baidu.com/view/73492.htm?fr=aladdin DWR2.0以后新增加了JDK5的注解(Annotation)功能,使用注解功能之后可以从 ...
- java.lang.ClassNotFoundException: org.apache.commons.dbcp.BasicDataSource解决方法
java.lang.ClassNotFoundException: org.apache.commons.dbcp.BasicDataSource解决方法 只需把这三个commons-pool.jar ...
- libev源代码浅析
libev是一个开源的事件驱动库,基于epoll,kqueue等OS提供的基础设施.其以高效出名,它可以将IO事件,定时器,和信号统一起来,统一放在事件处理这一套框架下处理. libev的基本使用方法 ...
- win8.1镜像制作
使用自带的powerShell工具,以管理员身份运行,比如镜像的目标位置为F盘,那么用下面的命令即可, wbAdmin start backup -backupTarget:F: -include:C ...