关闭

把Android源码中的密码对转换为keystore的方法

标签: android
147人阅读 评论(0) 收藏 举报
分类:

一、前言
goolge为我们提供了4个标准的key,以签名测试程序:
testkey -- a generic key for packages that do not otherwise specify a key.
platform -- a test key for packages that are part of the core platform.
shared -- a test key for things that are shared in the home/contacts process.
media -- a test key for packages that are part of the media/download system.
它们位于Android源码的以下目录
android\build\target\product\security
注意,这些key只是用于工程版的Android系统.在编译时android源码时,使用eng选项即表示编译生成工程版的Android系统,
而使用user选项时表示编译用户版(即正式版)的Android系统。
二、使用key生成keystore文件
使用google的标准key生成keystore文件。我们需要2个工具,openssl  (cryptography and SSL/TLS toolkit) and keytool
openssl是Linux上的一个工具,keytool则是JDK的一个工具,它位于JDK\bin目录。在此假设你已经把JDK\bin添加到了window的path环境变量中。因为一般用户使用的是window系统,
所以我这里把Cygwin安装在window上来模拟Linux环境,在Cygwin上使用opnssl.
关于Cygwi详细内容请参考cygwin安装详解》。
2.1、命令行方式
在这里我将以platform为例进行讲解。
通过“Cygwin Terminal”的进入Cygwin的命令行,然后切换到key所在的目录。即security目录.
输入以下命令:
openssl pkcs8 -inform DER -nocrypt -in platform.pk8 -out platform.pem
执行该命令,将在目录下生成platform.pem文件
接着输入以下命令:
openssl pkcs12 -export -in  platform.x509.pem -out platform.p12 -inkey  platform.pem -password pass:android -name androiddebugkey
执行该命令,将在目录下生成platform.p12文件,它本质上应该就是一个数字证书。
进入DOS命令行,切换到key所在的目录。即security
然后输入命令:
keytool -importkeystore -deststorepass android -destkeystore ./platform.jks -srckeystore ./platform.p12 -srcstoretype PKCS12 -srcstorepassandroid
执行该命令,将在目录下生成platform.jks文件,它就是我们需要的keystore文件。它的后缀本身是没有关系。如果你更喜欢其后缀名为keystore。
上面的命令改成这样就行了。
keytool -importkeystore -deststorepass android -destkeystore ./platform.keystore -srckeystore ./platform.p12 -srcstoretype PKCS12 -srcstorepass android
另外,我方便我们可以使用批处理来进行处理。
通过“Cygwin Terminal”的进入Cygwin的命令行,然后切换到key所在的目录。即security目录.
使用sh ./export.sh命令运行export.sh文件.
export.sh文件如下:
#!/bin/sh

FILES=`find . -name "*.pk8"`
cat > generateKeystore.bat << END
rem autogenerated file
END

for FILE in $FILES 
do
FILE_NAME=`echo $FILE | awk -F.pk8 '{print $1}'`
if [ -f ${FILE_NAME}.pem ] 
then
    echo "file ${FILE_NAME}.pem exists"
else
`openssl pkcs8 -inform DER -nocrypt -in ${FILE} -out ${FILE_NAME}.pem`
fi

`openssl pkcs12 -export -in ${FILE_NAME}.x509.pem -out ${FILE_NAME}.p12 -inkey ${FILE_NAME}.pem -password pass:android -name androiddebugkey`
cat >> generateKeystore.bat << END
keytool -importkeystore -deststorepass android -destkeystore ${FILE_NAME}.jks -srckeystore ${FILE_NAME}.p12 -srcstoretype PKCS12 -srcstorepass android
END

done
在运行完成后,将在当前目录看到若干*pem文件,*.p12文件及一个generateKeystore.bat文件,window中直接双击运行它。这时你将看到生成的*.jks文件,它们就是我们需要得keystore文件。
generateKeystore.bat文件如下:
rem autogenerated file
keytool -importkeystore -deststorepass android -destkeystore ./media.jks -srckeystore ./media.p12 -srcstoretype PKCS12 -srcstorepass android
keytool -importkeystore -deststorepass android -destkeystore ./platform.jks -srckeystore ./platform.p12 -srcstoretype PKCS12 -srcstorepass android
keytool -importkeystore -deststorepass android -destkeystore ./shared.jks -srckeystore ./shared.p12 -srcstoretype PKCS12 -srcstorepass android
keytool -importkeystore -deststorepass android -destkeystore ./testkey.jks -srckeystore ./testkey.p12 -srcstoretype PKCS12 -srcstorepass android
2.2、Keytool-IUI界面化方式。
Keytool-IUI is Cryptography GUI 工具. It allows create, manage keys and certificates, encrypt and decrypt files.
在使用Keytool-IUI前,我们还是需要使用opensll来先生成.pem文件。
在这里我将以platform为例进行讲解。
第一步、通过“Cygwin Terminal”的进入Cygwin的命令行,然后切换到key所在的目录。即security目录.
输入以下命令:
openssl pkcs8 -inform DER -nocrypt -in platform.pk8 -out platform.pem
执行该命令,将在目录下生成platform.pem文件
第二步、双击keytool解压目录下的run_ktl.bat来启动Keytool IUI。进入Keytool IUI -> Create -> Keystore界面, 设置keystore文件的名字及存储路径, 并把它的密码设置为"android"。
如图1:
使用google的标准测试key来签名APK - hubingforever - 民主与科学
 
然后点击"ok"按钮
第三步、进入Keytool IUI -> Import-> Keystore’s entry -> Private key -> PEM file format界面
选择在第一步生成的Private key文件: platform.pem
选择Certificates chain file: platform.x509.pem的路径
设置输出Keystore文件的路径,并设置其密码为android
如图2
使用google的标准测试key来签名APK - hubingforever - 民主与科学
 
然后点击"ok"按钮
第四步、把的key在keystore中的别名设置为androiddebugkey,且密码设置为android。
如图3
使用google的标准测试key来签名APK - hubingforever - 民主与科学
 
然后点击"ok"按钮,弹出成功导出keystore文件的对象框。点击对话框的"ok"按钮。
这时出现keysore文件列表的界面 。
如图4:
使用google的标准测试key来签名APK - hubingforever - 民主与科学
 
另外你可以通过View keystores来进入该界面。
选中一个key项目,通过右键的"view Cerificate chain",可以看到key的指纹等详细信息。
如图5
使用google的标准测试key来签名APK - hubingforever - 民主与科学

点击"close"按钮结束。
三、在eclipse中使用keystore
可以在eclipse的preferences设置你的要使用的keystore文件。
如图6
使用google的标准测试key来签名APK - hubingforever - 民主与科学
 
四、命令行中使用keystore对APK签名
关于此请参考《APK签名
五、查看APK使用的数字签名
解压APK文件,对其META-INF目录下的CERT.RSA文件,执行以下命令就可以到它的数字签名的详细情况
keytool -printcert -file CERT.RSA
另外在Android源码,可以通过应用程序Android.mk文件的LOCAL_CERTIFICATE查看它使用的哪种key。
比如:LOCAL_CERTIFICATE := platform

0
0
查看评论

Android源码中的密码对转换为keystore

如果要在Eclipse中调试Android源码中非test key签名的程序(也就是使用platform, media or shared key签名的程序),需要把Android源码中的公私钥对(build/target/product/security)转换为Eclipse能够使用的keysto...
  • plhbao
  • plhbao
  • 2015-01-14 16:05
  • 281

把Android源码中的密码对转换为keystore的方法

如果要在Eclipse中调试Android源码中非test key签名的程序(也就是使用platform, media or shared key签名的程序),需要把Android源码中的公私钥对(build/target/product/security)转换为Eclipse能够使用的keysto...
  • xzw00
  • xzw00
  • 2014-03-03 16:31
  • 185

Android keystore 密码找回

昨天准备给自己的应用发布一个新版本,在apk打包时,发现之前的用的keystore密码忘了。 蛋碎了一地,我把我所能想到的密码都试了一遍(注:我平常在各个门户网站注册基本上用的都是那几个字母和数字组合做密码),无果。 折腾到凌晨一点半,死的心都有了。 Google和百度搜个底朝天,也没找到...
  • meegomeego
  • meegomeego
  • 2014-05-14 09:33
  • 13831

Android Keystore忘记密码怎么办?

简介android的签名对于我们应用开发来说是非常重要的,如果一个app用一个签名发布出去了,以后要换成别的签名是非常麻烦的事情,最明显特征就是两个不同签名的app是不能替换安装的。而我们实际开发中也经常会遇到keystore忘记密码的问题,遇到这种情况改怎么办呢?神器AndroidKeystore...
  • QQxiaoqiang1573
  • QQxiaoqiang1573
  • 2016-08-05 11:47
  • 5114

android默认debug.keystore的密码

在Eclipse里面编译生成的APK中有一个签名的,它默认的key是debug.keystore,它默认的路径是: C:\Users\\.android\debug.keystore 这个key的密码是:android  =======================...
  • mac_lim
  • mac_lim
  • 2014-09-24 13:37
  • 6849

android keystore 找回密码

我从来没有写过博客,今天是第一次写。太书面的话我也不会说,只会说最通俗的话,只求解决问题,不多说没用的话,绕来绕去,所以请大家不要损我。    今天本来要打个android APK正式版,谁知道最后关头,密码忘了(我也是犯了经验注意的错误,所以以后计量把密码这样的东西记得一个文档...
  • Winmy2y
  • Winmy2y
  • 2016-01-26 16:21
  • 1109

将Android源码中的公私钥对转换为keystore的方法

一、前言 goolge为我们提供了4个标准的key,以签名测试程序: testkey -- a generic key for packages that do not otherwise specify a key. platform -- a test key ...
  • konan1027
  • konan1027
  • 2014-11-17 13:24
  • 314

Android签名公私密钥对转换为keystore

如果要在Eclipse中调试Android源码中非test key签名的程序(也就是使用platform, media or sharedkey签名的程序),需要把Android源码中的公私钥对(build/target/product/security)转换为Eclipse能够使用的keystor...
  • vvcumt
  • vvcumt
  • 2014-08-19 21:07
  • 939

keystore 密码忘记找回

转载自:http://www.eoeandroid.com/forum.php?mod=viewthread&tid=333163 昨天准备给自己的应用发布一个新版本,在apk打包时,发现之前的用的keystore密码忘了。 蛋碎了一地,我把我所能想到的密码都试了一遍(注:我平常在各...
  • qq_37225630
  • qq_37225630
  • 2018-01-08 14:59
  • 47

android 命令创建签名文件keystore、修改已有keystore的别名密码、重新签名APK

由于现在开发android JDK基本都是用的1.7及以上,所以低版本的JDK的就不记录了。 首先找到一个文件夹,以下操作都在同一个文件夹内,这样是为了更加方便,当然也可以不这么做,那么后面的命令行中对应文件就要指出路径了。 用命令进入这个文件夹,这个命令我就不写出来了 一、创建签名文件 命令: k...
  • msn465780
  • msn465780
  • 2017-09-27 11:32
  • 495
    个人资料
    • 访问:2475次
    • 积分:127
    • 等级:
    • 排名:千里之外
    • 原创:9篇
    • 转载:7篇
    • 译文:0篇
    • 评论:0条
    文章分类