溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Android數(shù)字簽名的創(chuàng)建

發(fā)布時間:2020-04-07 03:21:20 來源:網(wǎng)絡(luò) 閱讀:808 作者:roadley 欄目:移動開發(fā)

Android的數(shù)字簽名是保證在同一個Android系統(tǒng)中,相同包名不同簽名的apk無法覆蓋安裝。

這么做的目的,是為了證明開發(fā)者的身份防止抵賴。

假設(shè)有用戶先裝了一個正版App,而后下載了一個相同包名的盜版App,如果可以覆蓋安裝,則不能使用戶得知這是個盜版(或者說與原來App不同)的App。

還有就是這個App若有什么后門病毒之類的,持有數(shù)字簽名的人就無法抵賴。


創(chuàng)建Android數(shù)字簽名的方式如下:

(1)在項目上右鍵,選擇Android Tools——>Export Signed Application Package

Android數(shù)字簽名的創(chuàng)建

(2)自動填入工程名,不允許修改和含有中文,需要修改的地方在上一步操作前先修改

Android數(shù)字簽名的創(chuàng)建

(3)輸入第一重密碼,若之前有了,最好拿之前的,這里我新建了一個,新建時要指定簽名文件的導(dǎo)出位置

Android數(shù)字簽名的創(chuàng)建

(4)輸入信息(別名,第二重密碼等)第二重密碼最好與第一重不相同

有效期選項,谷歌官方建議是到2033年以后,但少于亦可

Android數(shù)字簽名的創(chuàng)建

(5)設(shè)置導(dǎo)出APK的位置

Android數(shù)字簽名的創(chuàng)建

(6)至此,大功告成。下面測試下,拿導(dǎo)出的簽名后的APK和bin目錄里的APK做個實驗

Android數(shù)字簽名的創(chuàng)建

這個是拿bin目錄中的APK文件安裝到模擬器

直接安裝,告訴我們系統(tǒng)中已經(jīng)存在這個apk了

重新安裝,顯示成功。

(7)使用導(dǎo)出的已簽名的APK

Android數(shù)字簽名的創(chuàng)建

直接安裝,還是顯示已經(jīng)存在

從新安裝,顯示解析失敗,證書矛盾

這樣就驗證了之前提到的數(shù)字簽名的作用了。



以下內(nèi)容摘自 http://www.cnblogs.com/feisky/archive/2010/01/17/1650076.html


在Android系統(tǒng)中,所有安裝到系統(tǒng)的應(yīng)用程序都必有一個數(shù)字證書,此數(shù)字證書用于標(biāo)識應(yīng)用程序的作者和在應(yīng)用程序之間建立信任關(guān)系,如果一個permission的protectionLevel為signature,那么就只有那些跟該permission所在的程序擁有同一個數(shù)字證書的應(yīng)用程序才能取得該權(quán)限。Android使用Java的數(shù)字證書相關(guān)的機制來給apk加蓋數(shù)字證書,要理解android的數(shù)字證書,需要先了解以下數(shù)字證書的概念和java的數(shù)字證書機制。Android系統(tǒng)要求每一個安裝進(jìn)系統(tǒng)的應(yīng)用程序都是經(jīng)過數(shù)字證書簽名的,數(shù)字證書的私鑰則保存在程序開發(fā)者的手中。Android將數(shù)字證書用來標(biāo)識應(yīng)用程序的作者和在應(yīng)用程序之間建立信任關(guān)系,不是用來決定最終用戶可以安裝哪些應(yīng)用程序。這個數(shù)字證書并不需要權(quán)威的數(shù)字證書簽名機構(gòu)認(rèn)證,它只是用來讓應(yīng)用程序包自我認(rèn)證的。


同一個開發(fā)者的多個程序盡可能使用同一個數(shù)字證書,這可以帶來以下好處。

(1)有利于程序升級,當(dāng)新版程序和舊版程序的數(shù)字證書相同時,Android系統(tǒng)才會認(rèn)為這兩個程序是同一個程序的不同版本。如果新版程序和舊版程序的數(shù)字證書不相同,則Android系統(tǒng)認(rèn)為他們是不同的程序,并產(chǎn)生沖突,會要求新程序更改包名。

(Roadley:這點至關(guān)重要)

(2)有利于程序的模塊化設(shè)計和開發(fā)。Android系統(tǒng)允許擁有同一個數(shù)字簽名的程序運行在一個進(jìn)程中,Android程序會將他們視為同一個程序。所以開發(fā)者可以將自己的程序分模塊開發(fā),而用戶只需要在需要的時候下載適當(dāng)?shù)哪K。

(3)可以通過權(quán)限(permission)的方式在多個程序間共享數(shù)據(jù)和代碼。Android提供了基于數(shù)字證書的權(quán)限賦予機制,應(yīng)用程序可以和其他的程序共享概功能或者數(shù)據(jù)給那那些與自己擁有相同數(shù)字證書的程序。如果某個權(quán)限(permission)的protectionLevel是signature,則這個權(quán)限就只能授予那些跟該權(quán)限所在的包擁有同一個數(shù)字證書的程序。


在簽名時,需要考慮數(shù)字證書的有效期

(1)數(shù)字證書的有效期要包含程序的預(yù)計生命周期,一旦數(shù)字證書失效,持有改數(shù)字證書的程序?qū)⒉荒苷I墶?/p>

(2)如果多個程序使用同一個數(shù)字證書,則該數(shù)字證書的有效期要包含所有程序的預(yù)計生命周期。

(3)Android Market強制要求所有應(yīng)用程序數(shù)字證書的有效期要持續(xù)到2033年10月22日以后。

(Roadley:應(yīng)該是google play上面的應(yīng)用程序需要又掀起到2033年以后,導(dǎo)出簽名包時并無限制,只有警告)


Android數(shù)字證書包含以下幾個要點:

(1)所有的應(yīng)用程序都必須有數(shù)字證書,Android系統(tǒng)不會安裝一個沒有數(shù)字證書的應(yīng)用程序

(Roadley:我們平時編程時可以直接運行在模擬器上是因為eclipse會自動幫我們簽名)

(2)Android程序包使用的數(shù)字證書可以是自簽名的,不需要一個權(quán)威的數(shù)字證書機構(gòu)簽名認(rèn)證

(3)如果要正式發(fā)布一個Android ,必須使用一個合適的私鑰生成的數(shù)字證書來給程序簽名,而不能使用adt插件或者ant工具生成的調(diào)試證書來發(fā)布。

(Roadley:eclipse生成的私鑰并不是固定的,所以使用它來簽名并不保險)

(4)數(shù)字證書都是有有效期的,Android只是在應(yīng)用程序安裝的時候才會檢查證書的有效期。如果程序已經(jīng)安裝在系統(tǒng)中,即使證書過期也不會影響程序的正常功能。

(5)Android使用標(biāo)準(zhǔn)的java工具 Keytool and Jarsigner 來生成數(shù)字證書,并給應(yīng)用程序包簽名。

(6)使用zipalign優(yōu)化程序。


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI