Android 簽名基礎(chǔ)知識(shí)

文章大綱:

  • Android 為什么要簽名
  • keystore的生成
  • Android 怎么簽名
  • 查看 apk 是否簽名
  • 查看 Apk 的MD5值以及MD5不顯示時(shí)的解決辦法

Android 為什么要簽名

在安裝 apk 時(shí)呢燥,需要確保 apk 來(lái)源的真實(shí)性寓娩,以及 apk 沒有被第三方篡改。為了解決這一問題寞埠,Android官方要求開發(fā)者對(duì) apk 進(jìn)行簽名仁连,所謂的簽名就是對(duì)apk進(jìn)行加密的過程。

keystore的生成:

在簽名之前要生成 keystore 文件來(lái)存儲(chǔ)密鑰

(1)分階段生成:
keytool -genkey -alias yushan(別名) -keypass yushan(別名密碼) -keyalg RSA(算法) -keysize 1024(密鑰長(zhǎng)度) -validity 365(有效期使鹅,天單位) -keystore 指定路徑/yushan.keystore(指定生成證書的位置和證書名稱) -storepass 123456(獲取keystore信息的密碼) 回車輸入相關(guān)信息即可昌抠;

 keytool -genkey -alias test -keypass testmima -keyalg RSA -keysize 1024 -validity 365 -keystore /Users/xxx/Desktop/test.keystore   

或者:

keytool -genkey -v -keystore test.keystore -alias test -keyalg RSA -validity 365 -storepass 123456
image

(2)一次性生成:
keytool -genkey -alias test -keypass test -keyalg RSA -keysize 1024 -validity 365 -keystore 指定路徑/test.keystore -storepass 123456 -dname "CN=(名字與姓氏), OU=(組織單位名稱), O=(組織名稱), L=(城市或區(qū)域名稱), ST=(州或省份名稱), C=(單位的兩字母國(guó)家代碼)"(中英文即可)

keystore信息的查看:

keytool -list -v -keystore test.keystore -storepass 123456

image

參數(shù)說(shuō)明:

  • -genkey 【生成密鑰對(duì)】
  • -alias 【別名】
  • -keypass 【私鑰舊密碼】
  • -keyalg 【關(guān)鍵算法】
  • -keysize 【密鑰長(zhǎng)度】
  • -validity 【有效時(shí)長(zhǎng)裁厅,以天為單位】
  • -keystore 【密鑰存儲(chǔ)庫(kù)位置】
  • -storepass 【密鑰庫(kù)密碼】
  • -dname 【指定證書擁有者信息】

一般在公司會(huì)在項(xiàng)目中的 keystore 目錄下創(chuàng)建一個(gè) key.properties 文件侨艾,來(lái)記錄 keystore 關(guān)鍵信息,里面的內(nèi)容是:

key.store=keystore/test.keystore 
key.store.password=123456
key.alias=test
key.alias.password= testmima
key.sigalg=RSA

Android 怎么簽名

通過使用 Java 自帶的 keytool 和 jarsigner 工具或 apksigner 工具(android 11)進(jìn)行簽名袋励。

使用 jarsigner 簽名

/Library/Java/JavaVirtualMachines/xxx.jdk/Contents/Home/bin

需要進(jìn)入到 jarsigner 所在的位置当叭,通過以下命令可以對(duì)名為 test 的 apk 簽名:
jarsigner -verbose -keystore test.keystore【keystore路徑】 test.apk 【apk 名稱】test【別名】

如何查找 jdk 位置

java -version 可以查看 java 版本
java -verbose 可以查看 jdk 路徑,和其他信息
java -verbose

java -verbose

簽名時(shí)遇到的問題

在android 11的設(shè)備上安裝時(shí) 可能會(huì)出現(xiàn):
Failure [-124: Failed parse during installPackageLI: Targeting R+ (version 30 and above) requires the resources.arsc of installed APKs to be stored uncompressed and aligned on a 4-byte boundary] 的問題

以上問題的原因:
是關(guān)于zip 4字節(jié)對(duì)齊糠雨,請(qǐng)參考zipalign

解決方法:
使用 apksigner 對(duì)其簽名

假設(shè)需要被簽名的文件為:source.apk

  • 先進(jìn)入 /Users/xxx/Library/Android/sdk/build-tools/30.0.3 路徑中
  • 先刪除了客戶的v1簽名,即刪除 META-INF目錄(META-INF目錄下存放的是簽名信息,可能報(bào)找不到META-INF/* 琅攘,不重要)
    zip -d source.apk META-INF/*
  • 獲取4KB對(duì)齊apk(source_4.apk 是對(duì)齊后的結(jié)果文件)
    zipalign -v 4 source.apk source_4.apk
  • 查看是否結(jié)果文件是否對(duì)齊 (成功后會(huì)報(bào):Verification succesful)
    zipalign -c -v 4 source_4.apk
  • 然后通過 apksigner 簽名松邪,不能在使用 jarsigner 簽名
    apksigner sign --ks (簽名地址) --ks-key-alias (別名) --out (簽名后的apk地址) (待簽名apk地址)
  • 密碼庫(kù)短語(yǔ)是:keystore 的 password (上文的 123456)

查看 apk 是否簽名

查看source_4.apk 是否簽名逗抑,是什么類型的簽名
apksigner verify -v source_4.apk

查看 Apk 的MD5值或 SHA1 以及MD5不顯示時(shí)的解決辦法

  • 將以 .apk 結(jié)尾的 APK 文件更換為 .zip 文件
  • 解壓 zip 文件找到 META-INF/xx.RSA 文件
  • 命令查看 MD5 信息
    keytool -printcert -file 【xx.RSA文件所在路徑】

有的時(shí)候 看不到 MD5 值寒亥,可以使用命令行:
jadx-gui 目標(biāo)文件.apk
中的 APK signature 查看MD5 簽名荧关、SHA-1 簽名、SHA-256 簽名信息

例如:


看不到 MD5 值
通過 jadx-gui 查看 MD5

xx.RSA文件是簽名文件,它的命名如果不指定名稱則自動(dòng)截取別名中前8個(gè)字符
一般上傳到市場(chǎng)平臺(tái)的時(shí)候同波,被提示解析失敗未檩,沒有簽名文件,可能就是缺少了這個(gè)文件讹挎。

缺少 xx.RSA 文件的原因

缺少 xx.RSA 文件的原因,大概率是因?yàn)闆]有選中 V1 這種簽名方式马篮。

V1 vs V2

V2這種簽名方案是 Android 7.0引入的怜奖,它能提供更快的應(yīng)用安裝時(shí)間和更多針對(duì)未授權(quán) APK 文件更改的保護(hù)歪玲。具體請(qǐng)看 這里 。 而V1適用于所有android版本的機(jī)型滥崩,但在Android7.0及以上會(huì)缺少針對(duì)未授權(quán) APK 文件更改的保護(hù)钙皮;所以只選V2,Android7.0以下的機(jī)型會(huì)報(bào)錯(cuò)短条,同時(shí)選V1,V2贡定,適用所有機(jī)型可都。

命令行打包默認(rèn) V1蚓耽,V2 是都選中的田晚,如果不放心可以在 build.gradle 里做設(shè)置

在 app 的 build.gradle 的 android 標(biāo)簽下加入如下:

 signingconfigs {
        debug {
            v1signingenabled true
            v2signingenabled true
        }

        release {
            v1signingenabled true
            v2signingenabled true
        }
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末贤徒,一起剝皮案震驚了整個(gè)濱河市汇四,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌通孽,老刑警劉巖背苦,帶你破解...
    沈念sama閱讀 219,366評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異秕噪,居然都是意外死亡厚宰,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)撵幽,“玉大人,你說(shuō)我怎么就攤上這事逗载】鐾剩” “怎么了更耻?”我有些...
    開封第一講書人閱讀 165,689評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵秧均,是天一觀的道長(zhǎng)号涯。 經(jīng)常有香客問我锯七,道長(zhǎng),這世上最難降的妖魔是什么域蜗? 我笑而不...
    開封第一講書人閱讀 58,925評(píng)論 1 295
  • 正文 為了忘掉前任霉祸,我火速辦了婚禮,結(jié)果婚禮上丝蹭,老公的妹妹穿的比我還像新娘坪蚁。我一直安慰自己,他們只是感情好贱田,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,942評(píng)論 6 392
  • 文/花漫 我一把揭開白布湘换。 她就那樣靜靜地躺著统阿,像睡著了一般。 火紅的嫁衣襯著肌膚如雪帆离。 梳的紋絲不亂的頭發(fā)上结澄,一...
    開封第一講書人閱讀 51,727評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音们妥,去河邊找鬼勉吻。 笑死,一個(gè)胖子當(dāng)著我的面吹牛惑惶,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播僵控,決...
    沈念sama閱讀 40,447評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼鱼冀,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼雷绢!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起翘紊,我...
    開封第一講書人閱讀 39,349評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤帆疟,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后自赔,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體柳琢,經(jīng)...
    沈念sama閱讀 45,820評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡柬脸,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,990評(píng)論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了灾测。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片垦巴。...
    茶點(diǎn)故事閱讀 40,127評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡骤宣,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出憔披,到底是詐尸還是另有隱情,我是刑警寧澤精刷,帶...
    沈念sama閱讀 35,812評(píng)論 5 346
  • 正文 年R本政府宣布怒允,位于F島的核電站锈遥,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏所灸。R本人自食惡果不足惜爬立,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,471評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望抡秆。 院中可真熱鬧吟策,春花似錦、人聲如沸着撩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)憋沿。三九已至沪猴,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間运嗜,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工砸民, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留岭参,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,388評(píng)論 3 373
  • 正文 我出身青樓姿染,卻偏偏與公主長(zhǎng)得像秒际,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子闽颇,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,066評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 一寄锐、概述 這個(gè)玩意簡(jiǎn)單說(shuō)起來(lái)很簡(jiǎn)單兵多,詳細(xì)描述起來(lái)很復(fù)雜,復(fù)雜在什么地方呢橄仆,首先有一塊陌生的知識(shí)點(diǎn)中鼠,包括但不限于證書...
    Time_x閱讀 2,355評(píng)論 1 1
  • 概述 這個(gè)玩意簡(jiǎn)單說(shuō)起來(lái)很簡(jiǎn)單,詳細(xì)描述起來(lái)很復(fù)雜沿癞,復(fù)雜在什么地方呢援雇,首先有一塊陌生的知識(shí)點(diǎn),包括但不限于證書椎扬,數(shù)...
    千山萬(wàn)水迷了鹿閱讀 7,464評(píng)論 3 18
  • 從開始著手公司app安卓原生版本的開發(fā)惫搏,到如今2.3發(fā)布,已經(jīng)過了快半年的時(shí)間蚕涤,在這半年的時(shí)間里筐赔,已經(jīng)逐漸掌握了A...
    呆萌狗和求疵喵閱讀 4,048評(píng)論 1 10
  • 基礎(chǔ)概念簽名:在 APK 中寫入一個(gè)「指紋」揖铜。指紋寫入以后茴丰,APK 中有任何修改,都會(huì)導(dǎo)致這個(gè)指紋無(wú)效天吓,Andro...
    cname_1閱讀 2,271評(píng)論 1 0
  • 查看keystore文件的指紋證書MD5值: 打開命令面板:win+R 進(jìn)入到你的.android目錄贿肩,一般在C盤...
    wilken閱讀 281評(píng)論 0 0