Android签名文件转化为pk8和pem的实现

 更新时间:2020年03月19日 11:30:21   作者:蚂蚁潜行  
这篇文章主要介绍了Android签名文件转化为pk8和pem的实现,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

Android签名工具

常用的android的签名工具有:jarsigner 和apksigner。jarsigner使用keystore文件,apksigner使用pk8+x509.pem。

什么是.pem和.pk8文件

.pem

在android对apk签名的时候,.pem这种文件就是一个X.509的数字证书,里面有用户的公钥等信息,是用来解密的。文件格式里面不仅可以存储数字证书,还能存各种key。

.pk8

以.pk8为扩展名的文件,应该和PKCS #8是对应的,用来保存private key。

keystore文件转化为pk8+pem

1.将keystore文件转换为pkcs12格式

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

2. 将PKCS12 dump成pem

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

tmp.rsa.pem 是文本格式可以直接查看。

打开文本可以看到私钥(PRIVATE KEY )和证书(CERTIFICATE);

复制“BEGIN CERTIFICATE” “END CERTIFICATE” 到(新建个文件) cert.x509.pem

复制 “BEGIN RSA PRIVATE KEY” “END RSA PRIVATE KEY” 到(同上) private.rsa.pem

cert.x509.pem 文件即是我们最后需要的证书文件

3.生成pk8格式的私钥

openssl pkcs8 -topk8 -outform DER -in private.rsa.pem -inform PEM -out private.pk8 -nocrypt
cert.x509.pem private.pk8

即是我们最后需要的文件。

*备注:
-nocrypt 这个参数设定key加密 如果设置了这个参数 下面签名 只要证书+key 不需要密码了 如果加密 应该
openssl pkcs8 -topk8 -outform
DER -in private.rsa.pem -inform PEM -out private.pk8 接下来输入密码*

4.用法

java -jar signapk.jar cert.x509.pem private.pk8 unsigned.apk signed.apk

jarsigner 的用法

jarsigner -verbose -keystore android.keystore -signedjar android_signed.apk android.apk android.keystore

使用这种方式会报错:找不到 的证书链。×× 必须引用包含专用密钥和相应的公共密钥证书链的有效密钥库密钥条目。

jarsigner -verbose -keystore DT.jks -signedjar signed.apk unsigned.apk "别名"

补充知识:Android 创建自己的pk8, x509.pem并给app签名

1, 生成key

命令: keytool -genkey -v -keystore app.keystore -alias gundam_wing -keyalg RSA -validity 20000
控制台输出:
输入密钥库口令:
再次输入新口令:
您的名字与姓氏是什么?
[Unknown]: TechStone
您的组织单位名称是什么?
[Unknown]: Gundam
您的组织名称是什么?
[Unknown]: Gundam
您所在的城市或区域名称是什么?
[Unknown]: Shanghai
您所在的省/市/自治区名称是什么?
[Unknown]: Shanghai
该单位的双字母国家/地区代码是什么?
[Unknown]: zh
CN=TechStone, OU=Gundam, O=Gundam, L=Shanghai, ST=Shanghai, C=zh是否正确?
[否]: Y

正在为以下对象生成 2,048 位RSA密钥对和自签名证书 (SHA256withRSA) (有效期为 20,000 天):
CN=TechStone, OU=Gundam, O=Gundam, L=Shanghai, ST=Shanghai, C=zh
输入 <gundam_wing> 的密钥口令
(如果和密钥库口令相同, 按回车):
[正在存储app.keystore]

这个命令会生成带组织/个人信息的key,并存放在app.keystore文件中

2, 转换key的格式

命令:

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

控制台会提示输出tmp.p12的密码以及app.keystore的密码,输入正确之后将会生成tmp.p12文件。

3, 将PKCS12格式的key dump为可直接阅读的文本

命令:

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

dump过程中也会提示输入密码,正确输入之后可阅读的token会存储在tmp.rsa.pem中

4, 提取

用文本编辑器打开tmp.rsa.pem,将从
-----BEGIN PRIVATE KEY-----

-----END PRIVATE KEY-----

这一段(包含这两个tag)的文本复制出来,新建为文件my_private.rsa.pem

将从
-----BEGIN CERTIFICATE-----

-----END CERTIFICATE-----


这一段(包含这两个tag)的文本复制出来,新建为文件my.x509.pem (签名时用到的公钥)

5, 转换,生成pk8格式的私钥

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

这个生成的my_private.pk8就是签名时用到的私钥

6, 对apk签名

java -jar signapk.jar my.x509.pem my_private.pk8 my.apk my_signed.apk

以上这篇Android签名文件转化为pk8和pem的实现就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Android组合控件实现功能强大的自定义控件

    Android组合控件实现功能强大的自定义控件

    这篇文章主要介绍了Android组合控件实现功能强大的自定义控件的相关资料,需要的朋友可以参考下
    2016-05-05
  • Android实现计算器(计算表达式/计算小数点以及括号)

    Android实现计算器(计算表达式/计算小数点以及括号)

    这篇文章主要为大家详细介绍了Android实现计算器功能,计算表达式,能计算小数点以及括号,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-09-09
  • Android之线程池ThreadPoolExecutor的简介

    Android之线程池ThreadPoolExecutor的简介

    今天小编就为大家分享一篇关于Android之线程池ThreadPoolExecutor的简介,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • RecyclerView优雅实现复杂列表布局

    RecyclerView优雅实现复杂列表布局

    这篇文章主要为大家详细介绍了RecyclerView优雅实现复杂列表布局,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-11-11
  • Android多线程断点续传下载实现代码

    Android多线程断点续传下载实现代码

    这篇文章主要介绍了Android多线程断点续传下载实现代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11
  • Android实现Service重启的方法

    Android实现Service重启的方法

    这篇文章主要介绍了Android实现Service重启的方法,涉及Android操作Service组件实现服务重启的功能,需要的朋友可以参考下
    2015-05-05
  • Android仿支付宝微信支付密码界面弹窗封装dialog

    Android仿支付宝微信支付密码界面弹窗封装dialog

    这篇文章主要介绍了Android仿支付宝微信支付密码界面弹窗封装dialog的实例代码,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-03-03
  • Android如何通过手机获取验证码来完成注册功能

    Android如何通过手机获取验证码来完成注册功能

    注册app或者网络帐号的时候,经常需要手机获取验证码,来完成注册功能,那么android如何通过手机获取验证码来完成注册功能,代码是怎么实现的呢?下面看看小编给大家带了的一段代码分析吧
    2015-11-11
  • Flutter 容器盒子模型的使用示例

    Flutter 容器盒子模型的使用示例

    在网页开发中,有盒子模型,号称统一三端的 Flutter 也不例外,而且和 HTML 的盒子模型几乎是一样的,本篇文章通过简单的例子说明一下 Flutter 的盒子模型,方便以后再做界面时可以更好的理解布局。
    2021-05-05
  • Android 的Bitmap的修改方法

    Android 的Bitmap的修改方法

    Android 的Bitmap的修改方法,需要的朋友可以参考一下
    2013-05-05

最新评论