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的实现就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持小牛知识库。
是否有无论如何创建pem和pk8文件由我的应用程序本身使用java编程?
本文向大家介绍实战android打包和签名,包括了实战android打包和签名的使用技巧和注意事项,需要的朋友参考一下 小编在之前给大家介绍过很多android项目打包的经验,本篇内容我们通过一个项目实例来给大家讲解android每一步打包和签名的过程。 android打包 以下是原理图: 由android的项目经过编译和打包,形成了: .dex 文件 resources.arsc uncompi
问题内容: 我已经看到了许多类似的问题,但对我而言,没有任何效果。我只是想将从服务器检索到的PEM格式的RSA公钥转换为Android中的。谁能指出我正确的方向? 编辑:我已经成功使用以下代码将PEM转换为PublicKey,但是在编码消息后,我得到了意外的输出… 输出如下所示: 当我期望更接近: 我缺少某些格式或文件类型吗? 问题答案: 要回答我自己的问题…第一个输出为十六进制,第二个输出为ba
本文向大家介绍Tensorflow 实现将图像与标签数据转化为tfRecord文件,包括了Tensorflow 实现将图像与标签数据转化为tfRecord文件的使用技巧和注意事项,需要的朋友参考一下 tensorflow中如果要对神经网络模型进行训练,需要把训练数据转换为tfrecord格式才能被读取,tensorflow的model文件里直接提供了相应的脚本文件在下面的文件夹中: cd tens
谁能告诉我从文件中提取/转换证书和私钥文件的正确方法/命令吗?我刚读到它们是可以互换的,但不是怎么互换的。
问题内容: 如何将类路径上的文件名转换为真实文件名? 例如,假设目录位于您的类路径中。该目录中有一个文件,例如。 仅给出字符串,如何确定(运行时)info.properties文件的绝对文件路径? 结果将是类似。 为什么这有用?编写单元测试时,您可能想访问捆绑在测试资源()中的文件,但正在使用需要真实文件名而不是相对类路径引用的第三方库或其他系统。 注意:我已经亲自回答了这个问题,因为我觉得这是一