因?yàn)榻趧傖槍?duì)各應(yīng)用平臺(tái)對(duì)APP備案時(shí)間節(jié)點(diǎn)要求進(jìn)行了統(tǒng)一整理,然后隔天就被要求提供一下app相關(guān)的的公鑰和MD5,雖然很快就解決了這個(gè)事情,但忍不住又稍微衍生了一下,但行小步,莫問(wèn)遠(yuǎn)方吧
關(guān)聯(lián)Blog
- APP備案(Android) - 各應(yīng)用平臺(tái)對(duì)APP備案時(shí)間節(jié)點(diǎn)要求
- APP備案(Android) - 獲取簽名證書公鑰、MD5
Tip:如果著急獲取公鑰和MD5
可以直接用便捷工具,反之有興趣的話可以看看其他獲取公鑰和MD5
的方式
基礎(chǔ)認(rèn)知
證書公鑰(Public Key)
- 加密通信: 在公鑰加密系統(tǒng)中,公鑰用于加密數(shù)據(jù),而私鑰用于解密。在安全通信中,通信雙方可以交換公鑰,并使用對(duì)方的公鑰加密數(shù)據(jù),保證了數(shù)據(jù)的機(jī)密性。
- 數(shù)字簽名驗(yàn)證: 證書公鑰也用于驗(yàn)證數(shù)字簽名。數(shù)字簽名是對(duì)數(shù)據(jù)的摘要,通過(guò)使用私鑰對(duì)摘要進(jìn)行簽名,然后使用公鑰來(lái)驗(yàn)證簽名的有效性。這確保了數(shù)據(jù)的完整性和真實(shí)性。
MD5(Message Digest Algorithm 5)
需要注意的是,MD5 目前不再被認(rèn)為是安全的加密算法,因?yàn)樗菀资艿脚鲎补簦ǘ鄠€(gè)不同的輸入產(chǎn)生相同的摘要)。在安全性要求較高的情況下,應(yīng)考慮使用更強(qiáng)大的哈希算法,例如 SHA-256 或 SHA-3。
- 數(shù)據(jù)完整性: MD5 是一種哈希函數(shù),用于生成數(shù)據(jù)的唯一固定長(zhǎng)度的摘要。這個(gè)摘要通常用于驗(yàn)證數(shù)據(jù)的完整性。如果原始數(shù)據(jù)發(fā)生變化,其 MD5 摘要也會(huì)發(fā)生變化,因此接收方可以比較原始數(shù)據(jù)的 MD5 摘要以
檢測(cè)是否存在任何篡改
。 - 文件校驗(yàn): MD5 常用于校驗(yàn)文件完整性。在下載文件后,可以計(jì)算文件的 MD5 值并與提供的 MD5 值進(jìn)行比較,以
確保文件未被損壞或篡改
。 - 密碼存儲(chǔ): 盡管 MD5 不再被推薦用于密碼存儲(chǔ),但在過(guò)去的一些應(yīng)用中,它被用于生成密碼的散列值?,F(xiàn)代應(yīng)用通常使用更安全的哈希算法,如 SHA-256。
便捷工具
近期基本所有國(guó)內(nèi)Android應(yīng)用平臺(tái)因?yàn)楣ば挪康囊蠖夹枰M(jìn)行APP備案
,在APP備案中需要提供公鑰、MD5
,所以很多工具app應(yīng)運(yùn)而生,這種工具我并不確定是否以后還一直可以使用,故除此之外我還提供了另一種核心方式,萬(wàn)變不離其中~
APP備案助手
公鑰、MD5
核心方式
準(zhǔn)備工作
因?yàn)槲沂鞘褂肈emo做演練,所以我需要先 生成 keystore、jks 簽名證書,然后在 反編譯keystore、jks簽名證書 獲取部分信息
#生成jsk格式的簽名證書
keytool -genkeypair -v -keystore testkeyly.jks -keyalg RSA -keysize 2048 -validity 10000 -alias testkeyly -storetype JKS
公鑰
通過(guò) keytool
工具獲取簽名證書
#示例 your_alias、your_keystore 分別輸入自己的簽名信息 & certificate 證書名稱(可自行更改)
keytool -export -alias your_alias -file certificate.cer -keystore your_keystore.keystore
# demo 示例
keytool -export -alias tmpkey -file certificate.cer -keystore tmpkey.jks
cmd操作結(jié)果
生成cer格式文件
直接在詳細(xì)信息獲取公鑰即可
MD5
如果當(dāng)前本地JDK環(huán)境用的1.8的話,可以直接采用如下方式,逆向獲取證書信息節(jié)課,如沒(méi)有MD5則查看后續(xù)的異常處理方式
逆向簽名 - keystore、jks簽名文件
# 示例 xxx 輸入自己的簽名文件名即可
keytool.exe -list -v -keystore xxx.keystore或xxx.jks
#demo 示例
keytool -list -v -keystore tmpkey.jks
正常的話簽名信息中可以看到MD5,如下
看到這里可能你也遇到不正常的場(chǎng)景了…
例如簽名信息中根本不包含MD5信息… 而且密鑰庫(kù)類型也不同…
核心方式 - MD5異常場(chǎng)景處理方式
查了一下資料,發(fā)現(xiàn)可能高于JDK1.8的環(huán)境 移除了 這些
Disable MD5 or MD2 signed jars
,導(dǎo)致均無(wú)法通過(guò)keyTool
獲取到MD5
信息
環(huán)境介紹
當(dāng)前環(huán)境
-
本地環(huán)境:驗(yàn)證了一下我本地JDK版本已經(jīng)到了
11.0.18
了 - 項(xiàng)目環(huán)境:JDK
1.8
- Tip:其實(shí)下面的方式都是曲線操作,有興趣的可以去看一下采用 openssl 獲取MD5的方式,因最近減法還沒(méi)做完,我就先不去深挖了,有機(jī)會(huì)我再去淺學(xué)一下…
signingReport(可用)
執(zhí)行方式 + 默認(rèn)配置(并未設(shè)置簽名信息,故該處標(biāo)紅區(qū)域的MD5值不對(duì)
)
效果如圖
在build.gradle
中聲明對(duì)應(yīng)的簽名信息,然后重新執(zhí)行該操作(可參考:debug模式下打出release簽名包)
jadx 驗(yàn)證(未親測(cè),應(yīng)可用)
早以前我就記錄過(guò) Jadx快速實(shí)現(xiàn)Apk反編譯 ,這里就不再贅述了,圖就直接套了…
APK signature
- Modulus/模數(shù) 為公鑰,十進(jìn)制顯示的
- MD5 Fingerprint/MD5簽名,APP備案填寫時(shí)需要去掉空格,填寫32位長(zhǎng)度的十六進(jìn)制數(shù)據(jù)
RSA文件(親測(cè),未必全有效)
RAS本身是一種加密方式,這里的RSA文件就是加密文件
-
將
apk
后綴改為zip
,變?yōu)榭蓧嚎s包 -
解壓后進(jìn)入
META-INF
- 找一個(gè)
.RSA后綴文件
(如果沒(méi)有該文件,那么這個(gè)apk簽名可能存在問(wèn)題)
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-765105.html
4.使用 keytool
命令獲取MD5簽名(有的可能獲取不到,例如金融型app會(huì)進(jìn)行特殊的二次加密)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-765105.html
#xxx 替換成對(duì)應(yīng)的rsa文件名即可
keytool -printcert -file xxx.RSA
到了這里,關(guān)于APP備案(Android) - 獲取簽名證書公鑰、MD5的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!