Android簽名文件轉(zhuǎn)化為pk8和pem的實(shí)現(xiàn)
Android簽名工具
常用的android的簽名工具有:jarsigner 和apksigner。jarsigner使用keystore文件,apksigner使用pk8+x509.pem。
什么是.pem和.pk8文件
.pem
在android對(duì)apk簽名的時(shí)候,.pem這種文件就是一個(gè)X.509的數(shù)字證書,里面有用戶的公鑰等信息,是用來(lái)解密的。文件格式里面不僅可以存儲(chǔ)數(shù)字證書,還能存各種key。
.pk8
以.pk8為擴(kuò)展名的文件,應(yīng)該和PKCS #8是對(duì)應(yīng)的,用來(lái)保存private key。
keystore文件轉(zhuǎn)化為pk8+pem
1.將keystore文件轉(zhuǎn)換為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 是文本格式可以直接查看。
打開(kāi)文本可以看到私鑰(PRIVATE KEY )和證書(CERTIFICATE);
復(fù)制“BEGIN CERTIFICATE” “END CERTIFICATE” 到(新建個(gè)文件) cert.x509.pem
復(fù)制 “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 這個(gè)參數(shù)設(shè)定key加密 如果設(shè)置了這個(gè)參數(shù) 下面簽名 只要證書+key 不需要密碼了 如果加密 應(yīng)該
openssl pkcs8 -topk8 -outform
DER -in private.rsa.pem -inform PEM -out private.pk8 接下來(lái)輸入密碼*
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
使用這種方式會(huì)報(bào)錯(cuò):找不到 的證書鏈。×× 必須引用包含專用密鑰和相應(yīng)的公共密鑰證書鏈的有效密鑰庫(kù)密鑰條目。
jarsigner -verbose -keystore DT.jks -signedjar signed.apk unsigned.apk "別名"
補(bǔ)充知識(shí):Android 創(chuàng)建自己的pk8, x509.pem并給app簽名
1, 生成key
命令: keytool -genkey -v -keystore app.keystore -alias gundam_wing -keyalg RSA -validity 20000
控制臺(tái)輸出:
輸入密鑰庫(kù)口令:
再次輸入新口令:
您的名字與姓氏是什么?
[Unknown]: TechStone
您的組織單位名稱是什么?
[Unknown]: Gundam
您的組織名稱是什么?
[Unknown]: Gundam
您所在的城市或區(qū)域名稱是什么?
[Unknown]: Shanghai
您所在的省/市/自治區(qū)名稱是什么?
[Unknown]: Shanghai
該單位的雙字母國(guó)家/地區(qū)代碼是什么?
[Unknown]: zh
CN=TechStone, OU=Gundam, O=Gundam, L=Shanghai, ST=Shanghai, C=zh是否正確?
[否]: Y正在為以下對(duì)象生成 2,048 位RSA密鑰對(duì)和自簽名證書 (SHA256withRSA) (有效期為 20,000 天):
CN=TechStone, OU=Gundam, O=Gundam, L=Shanghai, ST=Shanghai, C=zh
輸入 <gundam_wing> 的密鑰口令
(如果和密鑰庫(kù)口令相同, 按回車):
[正在存儲(chǔ)app.keystore]
這個(gè)命令會(huì)生成帶組織/個(gè)人信息的key,并存放在app.keystore文件中
2, 轉(zhuǎn)換key的格式
命令:
keytool -importkeystore -srckeystore app.keystore -destkeystore tmp.p12 -srcstoretype JKS -deststoretype PKCS12
控制臺(tái)會(huì)提示輸出tmp.p12的密碼以及app.keystore的密碼,輸入正確之后將會(huì)生成tmp.p12文件。
3, 將PKCS12格式的key dump為可直接閱讀的文本
命令:
openssl pkcs12 -in tmp.p12 -nodes -out tmp.rsa.pem
dump過(guò)程中也會(huì)提示輸入密碼,正確輸入之后可閱讀的token會(huì)存儲(chǔ)在tmp.rsa.pem中
4, 提取
用文本編輯器打開(kāi)tmp.rsa.pem,將從
-----BEGIN PRIVATE KEY-----
到
-----END PRIVATE KEY-----這一段(包含這兩個(gè)tag)的文本復(fù)制出來(lái),新建為文件my_private.rsa.pem
將從
-----BEGIN CERTIFICATE-----
到
-----END CERTIFICATE-----
這一段(包含這兩個(gè)tag)的文本復(fù)制出來(lái),新建為文件my.x509.pem (簽名時(shí)用到的公鑰)
5, 轉(zhuǎn)換,生成pk8格式的私鑰
openssl pkcs8 -topk8 -outform DER -in my_private.rsa.pem -inform PEM -out my_private.pk8 -nocrypt
這個(gè)生成的my_private.pk8就是簽名時(shí)用到的私鑰
6, 對(duì)apk簽名
java -jar signapk.jar my.x509.pem my_private.pk8 my.apk my_signed.apk
以上這篇Android簽名文件轉(zhuǎn)化為pk8和pem的實(shí)現(xiàn)就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- android實(shí)現(xiàn)手寫簽名功能
- 使用Android Studio實(shí)現(xiàn)為系統(tǒng)級(jí)的app簽名
- Android系統(tǒng)制作自定義簽名的例子
- Android 項(xiàng)目正式簽名打包教程分享
- Android studio設(shè)置指定的簽名文件教程
- Android 自定義View手寫簽名并保存圖片功能
- Android實(shí)現(xiàn)簽名涂鴉手寫板
- Android Studio簽名打包的兩種方式(圖文教程)
- Android studio導(dǎo)出APP測(cè)試包和構(gòu)建正式簽名包
- Android開(kāi)發(fā)簽名知識(shí)梳理總結(jié)
相關(guān)文章
Android組合控件實(shí)現(xiàn)功能強(qiáng)大的自定義控件
這篇文章主要介紹了Android組合控件實(shí)現(xiàn)功能強(qiáng)大的自定義控件的相關(guān)資料,需要的朋友可以參考下2016-05-05Android實(shí)現(xiàn)計(jì)算器(計(jì)算表達(dá)式/計(jì)算小數(shù)點(diǎn)以及括號(hào))
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)計(jì)算器功能,計(jì)算表達(dá)式,能計(jì)算小數(shù)點(diǎn)以及括號(hào),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-09-09Android之線程池ThreadPoolExecutor的簡(jiǎn)介
今天小編就為大家分享一篇關(guān)于Android之線程池ThreadPoolExecutor的簡(jiǎn)介,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-03-03RecyclerView優(yōu)雅實(shí)現(xiàn)復(fù)雜列表布局
這篇文章主要為大家詳細(xì)介紹了RecyclerView優(yōu)雅實(shí)現(xiàn)復(fù)雜列表布局,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-11-11Android多線程斷點(diǎn)續(xù)傳下載實(shí)現(xiàn)代碼
這篇文章主要介紹了Android多線程斷點(diǎn)續(xù)傳下載實(shí)現(xiàn)代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11Android實(shí)現(xiàn)Service重啟的方法
這篇文章主要介紹了Android實(shí)現(xiàn)Service重啟的方法,涉及Android操作Service組件實(shí)現(xiàn)服務(wù)重啟的功能,需要的朋友可以參考下2015-05-05Android如何通過(guò)手機(jī)獲取驗(yàn)證碼來(lái)完成注冊(cè)功能
注冊(cè)app或者網(wǎng)絡(luò)帳號(hào)的時(shí)候,經(jīng)常需要手機(jī)獲取驗(yàn)證碼,來(lái)完成注冊(cè)功能,那么android如何通過(guò)手機(jī)獲取驗(yàn)證碼來(lái)完成注冊(cè)功能,代碼是怎么實(shí)現(xiàn)的呢?下面看看小編給大家?guī)Я说囊欢未a分析吧2015-11-11