什麼是android簽名
❶ Android簽名有什麼作用
Android簽名有什麼作用
最簡單直接的回答: 系統要求的。
Android系統要求每一個Android應用程式必須要經過數字簽名才能夠安裝到系統中,也就是說如果一個Android應用程式沒有經過數字簽名,是沒有辦法安裝到系統中的!
Android通過數字簽名來標識應用程式的作者和在應用程式之間建立信任關系,不是用來決定終端使用者可以安裝哪些應用程式。
這個數字簽名由應用程式的作者完成,並不需要權威的數字證書簽名機構認證,它只是用來讓應用程式包自我認證的。
平時我們的程式可以在模擬器上安裝並執行,是因為在應用程式開發期間,由於是以Debug面試進行編譯的,因此ADT根據會自動用預設的金鑰和證書來進行簽名,而在以釋出模式編譯時,apk檔案就不會得到自動簽名,這樣就需要進行手工簽名。給apk簽名可以帶來以下好處:1.、應用程序升級:如果你希望使用者無縫升級到新的版本,那麼你必須用同一個證書進行簽名。這是由於只有以同一個證書簽名,系統才會允許安裝升級的應用程式。如果你採用了不同的證書,那麼系統會要求你的應用程式採用不同的包名稱,在這種情況下相當於安裝了一個全新的應用程式。如果想升級應用程式,簽名證書要相同,包名稱要相同!2、應用程式模組化:Android系統可以允許同一個證書簽名的多個應用程式在一個程序里執行,系統實際把他們作為一個單個的應用程式,此時就可以把我們的應用程式以模組的方式進行部署,而使用者可以獨立的升級其中的一個模組3、程式碼或者資料共享:Android提供了基於簽名的許可權機制,那麼一個應用程式就可以為另一個以相同證書簽名的應用程式公開自己的功能。以同一個證書對多個應用程式進行簽名,利用基於簽名的許可權檢查,你就可以在應用程式間以安全的方式共享程式碼和資料了。不同的應用程式之間,想共享資料,或者共享程式碼,那麼要讓他們執行在同一個程序中,而且要讓他們用相同的證書簽名。
word 電子簽名有什麼作用?
對文件進行數字簽名與簽署紙質文件的原因大致相同。數字簽名通過使用計算機加密來驗證 (身份驗證:驗證人員和產品所宣告的身份是否屬實的過程。例如,通過驗證用於簽名程式碼的數字簽名來確認軟體發行商的程式碼來源和完整性。)數字資訊,如文件、電子郵件和巨集。數字簽名有助於確保:
真實性 數字簽名有助於確保簽署人的身份與宣告的相符。
完整性 數字簽名有助於確保內容在經過數字簽名之後未經更改或篡改。
不可否認 數字簽名有助於向所有方證明簽署內容的有效性。「否認」指簽名人否認任何與簽署內容有關系的行為。
為了確保以上各項,必須由內容建立者使用滿足下列條件的簽名對內容進行數字簽名:
該數字簽名有效 (有效:一種證書狀態,根據證書頒發機構的資料庫對證書進行檢查後發現它是合法的、最新的,而且沒有過期或被吊銷。由有效證書簽名且簽名後沒有更改的文件被視為有效文件。)。
與該數字簽名關聯的證書 (證書:一種證明身份和真實性的數字方法。證書由證書頒發機構頒發,而且和駕駛執照一樣,也可能過期或被吊銷。)有效(沒有過期)。
作為釋出者的簽名人或公司可信 (信任:表示您是否信任證書頒發的受體(個人或組)。預設設定是「繼承頒發者的信任關系」,也就是因為對頒發者(通常是證書頒發機構)的信任而信任證書。)。
與數字簽名關聯的證書由有聲望的證書頒發機構 (CA) (證書頒發機構 (CA):一個商業組織,它頒發數字證書,跟蹤被頒發證書的人員,對證書簽名以驗證其有效性,並跟蹤被吊銷或已過期的證書。) 頒發給簽名釋出者。
信用卡簽名有什麼作用
相當於合同 糾紛時有依據 平常是沒什麼拉
手機軟體簽名有什麼作用
目前有實力的公司或確實有需要的公司會購買諾基亞的高階權
限證書,通常是安全廠商.這類公司的軟體不需要我們自簽名,還有許多
軟體都是一般的應用軟體,和系統沒什麼關聯,它們許可權很低,不可能存
在危險,比如網路電視軟體,閱讀軟體,QQ,主題等都不需要簽名.需要簽
名的軟體軟體大致可分為以下幾種情況:(1)隨開機啟動的,比如來電
通,A4自簽名版;(2)不要你操作可以自動執行的,比如屏保程式;(3)進入
系統資料夾修改的,比如大部分後期漢化的軟體等,再次安裝漢化補丁
時就需要簽名.
可靠的電子簽名有什麼作用?
依據《中華人民共和國電子簽名法》第十四條:「可靠的電子簽名與手寫簽名或者蓋章具有同等的法律效力。」由此可見,只有使用「可靠的電子簽名」,電子合同才有可能具有與紙質合同同等的法律效力,即書證效力。
C#工程檔案簽名有什麼作用
主要是防止篡改破解。比如你寫的程式包括1個exe和若干dll,exe花費了很多工作量,而且上面有你們公司的標識。現在來了個黑客,反編譯了某個dll,發現很輕易就改動了裡面某個dll,比如注冊碼的dll,導致繞開了驗證碼。再來個黑客,把干好事的dll改成了刪掉所有磁碟上檔案的功能,導致使用者把你公司拉進黑名單。
如果簽了名,就可以保證exe只能呼叫你自己寫的dll,他們篡改了你的dll,exe會報錯,報找不到dll。
驅動程式簽名有什麼作用啊?
可以確認驅動程式與Windows 無相容性問題(不過不代表沒有簽名的驅動就一定不相容Windows)
新年快樂
android簽名工具干什麼用的
給apk簽名用的。但是你要有key,或者自己用eclipse生成一個。簽名有一個很重要作用就是防止程式釋出後被篡改簽名一般用私鑰,私鑰簽名以後會生成harsh值序列,公鑰驗證的時候(手機上),會根據檔案內容再生成一次harsh序列,如果和apk中的harsh序列相同,說明apk釋出後沒有被篡改過
禁止驅動程式強制簽名有什麼作用
沒有壞處。
驅動程式簽名又叫做驅動程式的數字簽名,它是由微軟的Windows硬體裝置質量實驗室完成的。硬體開發商將自己的硬體裝置和相應的驅動程式交給該實驗室,由實驗室對其進行測試,測試合格後實驗室將在其驅動程式中新增數字簽名。由於數字簽名是由微軟完成的。
使用有數字簽名的驅動程式將的好處:
安全保障 由於數字簽名是針對整個驅動程式的所有軟體進行的,所以在完成簽名後再對驅動程式進行任何更改都會導致簽名無效,這樣就避免了在驅動程式中新增惡意程式碼傳播病毒等惡意程式的可能性。
❷ Android APP的簽名
Android APP的簽名
Android項目以它的包名作為唯一的標識,如果在同一部手機上安裝兩個包名相同的APP,後者就會覆蓋前面安裝的應用。為了避免Android APP被隨意覆蓋,Android要求對APP進行簽名。下面介紹對APP進行簽名的步驟
1、選擇builder菜單下的Generate Signed APK
2、彈出簽名向導對話框
3、在該對話框中選擇數字證書,如果沒有數字證書,可以點擊Create new按鈕,創建數字證書如下圖所示:
4、輸入證書的存儲路徑及文件名稱,密碼,有效年份,發布人員的姓名,單位,所在城市,省份,國家等信息,後點擊OK按鈕,如下圖所示,系統會自動帶入密碼
5、點擊Next選擇簽名後的安裝包存放路徑,構建類型,點擊finish完成安裝包的構建
注意:
v2是Android 7.0中引入了簽名版本,v1是jar Signature來自JDK,只勾選v1簽名並不會影響什麼,但是在7.0上不會使用更安全的驗證方式,只勾選V2簽名7.0以下會直接安裝完顯示未安裝,7.0以上則使用了V2的方式驗證,為了保證兼容性,可以同時勾選V1和V2。
在Debug調試版本中,默認會調用調試用的簽名證書debug.keystore,該證書默認存放在C:\Users<你的用戶名>.android下。
包名和簽名都相同的APP才可以覆蓋安裝
❸ Android_簽名
keytool工具是java JDK自帶的證書工具
-genkey參數表示:要生成一個證書(版權、身份識別的安全證書)
-alias參數表示:證書有別名,-alias test 表示證書別名為test
-keyalg RSA表示加密類型,RSA表示需要加密,以防止別人盜取
-validity 2000表示有效時間2000天
-keystore test表示要生成的證書名稱為test
生成的數字證書test裡麵包換了非對稱加密的私鑰、公鑰和證書。
填寫如下相關信息->finish
jarsigner是Java的簽名工具
-verbose參數表示:顯示出簽名詳細信息
-keystore表示使用當前目錄中的android123.keystore簽名證書文件。
-signedjar game_signed.apk表示簽名後生成的APK名稱,game.apk表示未簽名的APK Android軟體, android.keystore表示別名
簽名後的apk最好做一次4自己對齊操作
簽名後解開apk文件裡面會多了META-INT文件夾
裡麵包含了所有apk中資源分別求Hash值
首先對MANIFEST.MF整個文件求Hash值存放在SHA1-Digest-Manifest中,然後再對MANIFEST.MF裡面的Hash值再求Hash值。
CERT.RSA保存加密後的信息,非對稱加密的公鑰,發行者名稱和主體名稱,生效日期和終止日期等
❹ 談一談Android的簽名機制
首先,簽名是防止apk信息被修改的一個機制,打包時把apk的信息與證書做處理,生成加密信息,安裝時發現問題則拒絕安裝
v1簽名將apk的其他文件與證書做處理,信息保存到META-INF文件夾里,這么做的主要問題是直接修改apk包體是沒法檢測出來的,並由此導致了如Janus(CVE-2017-13156)這樣的極嚴重的漏洞(ART支持直接運行dex文件,通過dex頭部的魔數進行判斷,而應用安裝過程中是通過zip尾部的魔數判斷是否是有效的zip文件,所以只要構造出一個既是dex又是zip的文件就能繞過簽名驗證修改裡面的dex文件)
v2簽名則直接用apk文件,處理之後寫入進去,這樣修改包體也會被系統檢測出從而被拒絕安裝.
v1簽名:將apk中文件加密保存到META-INF目錄中,不包含META-INF目中的文件。生成MANIFEST.MF、CERT.SF、CERT.RSA文件
MANIFEST.MF :保存各文件的SHA-1通過BASE64加密後的值
CERT.SF:保存MANIFEST.MF文件的SHA-1通過Base64加密後的值 和MANIFEST.MF中各項的值再次SHA-1並Base64加密保存
CERT.RSA:保存公鑰和發布機構信息
v2簽名:對apk整個文件進行分塊摘要加密,並把加密信息存在zip中央目錄前 放在apk sign block區
Android 7.0中引入了APK Signature Scheme v2,v1是jar Signature來自JDK。
V1:應該是通過ZIP條目進行驗證,這樣APK 簽署後可進行許多修改 - 可以移動甚至重新壓縮文件。
V2:驗證壓縮文件的所有位元組,而不是單個 ZIP 條目,因此,在簽名後無法再更改(包括 zipalign)。正因如此,現在在編譯過程中,我們將壓縮、調整和簽署合並成一步完成。好處顯而易見,更安全而且新的簽名可縮短在設備上進行驗證的時間(不需要費時地解壓縮然後驗證),從而加快應用安裝速度。
v1和v2的簽名使用
1)只勾選v1簽名並不會影響什麼,但是在7.0上不會使用更安全的驗證方式
2)只勾選V2簽名7.0以下會直接安裝完顯示未安裝,7.0以上則使用了V2的方式驗證
3)同時勾選V1和V2則所有機型都沒問題
❺ Android系統簽名
有時候,我們開發的apk需要用到系統許可權,需要在AndroidManifest.xml中添加共享系統進程屬性:
這時候apk的簽名就需要是系統簽名(platform、shared或media)才能正常使用。
常用系統簽名方式
這種方式比較麻煩,你需要有編譯過的源碼環境,並按如下步驟:
1、拷貝App源碼到Android源碼的packages/apps/目錄下,且App源碼是普通(Eclipse)格式的
2、配置Android.mk,在其中添加
3、使用mm編譯App,生成的apk即系統簽名
這種方式比在源碼環境下簽名簡單,App可以在Eclipse或Android Studio下編譯,然後給apk重新簽名即可。
但這種方式在頻繁調試的時候比較痛苦,即使寫成腳本,也需要重復一樣的操作。
相關文件
platform.x509.pem、platform.pk8、signapk.jar
文件位置
platform.x509.pem、platform.pk8:
signapk.jar:
signapk源碼路徑:
簽名命令
步驟
1、將相關文件及源apk文件置於同一路徑下
2、檢查源apk包,去掉META-INF/CERT.SF 和 META-INF/CERT.RSA 文件
3、執行簽名命令即可
讓Android Studio集成系統簽名,需要用到一個工具 keytool-importkeypair ,詳見下文。
這個工具的作用是將系統簽名的相關信息導入到已有的簽名文件里。
工具的使用方法可以通過–help或README.textile來尋求幫助
platform.x509.pem、platform.pk8、keytool-importkeypair、demo.jks、signature.sh
我的做法是在App根目錄新建Signature文件夾專門存放簽名相關文件。
步驟
1、生成demo.jks簽名文件
2、編寫簽名腳本signature.sh,內容如下:
為腳本文件添加可執行許可權:
執行腳本:
3、配置builde.gradle
在android區域下(與defaultConfig同級)添加配置:
這樣debug或release apk就帶有系統簽名了。
如果想直接Run app就是release版且帶系統簽名的apk,還需修改:
這樣直接Run app就是帶系統簽名的release版apk了。
❻ android 系統簽名
也有提到怎麼單獨給一個apk簽名,這里補充一下android的簽名許可權控制機制。
android的標准簽名key有:
testkey
media
latform
hared
以上的四種,可以在源碼的/build/target/proct/security裡面看到對應的密鑰,其中shared.pk8代表私鑰,shared.x509.pem公鑰,一定是成對出現的。
其中testkey是作為android編譯的時候默認的簽名key,如果系統中的apk的android.mk中沒有設置LOCAL_CERTIFICATE的值,就默認使用testkey。
而如果設置成:
LOCAL_CERTIFICATE := platform
就代表使用platform來簽名,這樣的話這個apk就擁有了和system相同的簽名,因為系統級別的簽名也是使用的platform來簽名,此時使用android:sharedUserId="android.uid.system"才有用!
在/build/target/proct/security目錄下有個README,裡面有說怎麼製作這些key以及使用問題(android4.2):
從上面可以看出來在源碼下的/development/tools目錄下有個make_key的腳本,通過傳入兩個參數就可以生成一對簽名用的key。
其中第一個為key的名字,一般都默認成android本身有的,因為很多地方都默認使用了這些名字,我們自定義的話只需要對第二個參數動手腳,定義如下:
C ---> Country Name (2 letter code) ST ---> State or Province Name (full name) L ---> Locality Name (eg, city) O ---> Organization Name (eg, company) OU ---> Organizational Unit Name (eg, section) CN ---> Common Name (eg, your name or your server』s hostname) emailAddress ---> Contact email addre
另外在使用上面的make_key腳本生成key的過程中會提示輸入password,我的處理是不輸入,直接enter,不要密碼!後面解釋,用自定義的key替換/security下面的。
可以看到android源碼裡面的key使用的第二個參數就是上面README裡面的,是公開的,所以要release版本的系統的話,肯定要有自己的簽名key才能起到一個安全控製作用。
在上面提到如果apk中的編譯選項LOCAL_CERTIFICATE沒有設置的話,就會使用默認的testkey作為簽名key,我們可以修改成自己想要的key,按照上面的步驟製作一個releasekey,修改android配置在/build/core/config.mk中定義變數:
在主makefile文件裡面:
ifeq ($(DEFAULT_SYSTEM_DEV_CERTIFICATE),build/target/proct/security/releasekey)
BUILD_VERSION_TAGS += release-key
這樣的話默認的所有簽名將會使用releasekey。
修改完之後就要編譯了,如果上面的這些key在製作的時候輸入了password就會出現如下錯誤:
我在網上找到了合理的解釋:
其實會出現這個錯誤的最根本的原因是多線程的問題。在編譯的時候為了加速一般都會執行make -jxxx,這樣本來需要手動輸入密碼的時候,由於其它線程的運行,就會導致影響當前的輸入終端,所以就會導緻密碼無法輸入的情況!
再編譯完成之後也可以在build.prop中查看到變數:
這樣處理了之後編譯出來的都是簽名過的了,系統才算是release版本
我發現我這樣處理之後,整個系統的算是全部按照我的要求簽名了。
網上看到還有另外的簽名release辦法,但是應該是針對另外的版本的,借用學習一下:
make -j4 PRODUCT-proct_mol-user dist
這個怎麼跟平時的編譯不一樣,後面多了兩個參數PRODUCT-proct_mol-user 和 dist. 編譯完成之後回在源碼/out/dist/目錄內生成個proct_mol-target_files開頭的zip文件.這就是我們需要進行簽名的文件系統.
我的proct_mol 是full_gotechcn,後面加「-user」代表的是最終用戶版本,關於這個命名以及proct_mol等可參考http://blog.csdn.net/jscese/article/details/23931159
編譯出需要簽名的zip壓縮包之後,就是利用/security下面的准備的key進行簽名了:
./build/tools/releasetools/sign_target_files_apks -d /build/target/proct/security out/dist/full_gotechcn-target_files.zip out/dist/signed_target_files.zi
簽名目標文件 輸出成signed_target_files.zi
如果出現某些apk出錯,可以通過在full_gotechcn-target_files.zip前面加參數"-e =" 來過濾這些apk.
然後再通過image的腳本生成imag的zip文件,這種方式不適用與我目前的工程源碼,沒有做過多驗證!
Android簽名機制可劃分為兩部分:(1)ROM簽名機制;(2)第三方APK簽名機制。
Android APK實際上是一個jar包,而jar包又是一個zip包。APK包的簽名實際上使用的是jar包的簽名機制:在zip中添加一個META的子目錄,其中存放簽名信息;而簽名方法是為zip包中的每個文件計算其HASH值,得到簽名文件(*.sf),然後對簽名文件(.sf)進行簽名並把簽名保存在簽名塊文件(*.dsa)中。
在編譯Android源碼生成ROM的過程中,會使用build/target/proct/security目錄中的4個key(media, platform, shared, testkey)來對apk進行簽名。其中,*.pk8是二進制形式(DER)的私鑰,*.x509.pem是對應的X509公鑰證書(BASE64編碼)。build/target/proct/security目錄中的這幾個默認key是沒有密碼保護的,只能用於debug版本的ROM。
要生成Release版本的ROM,可先生成TargetFiles,再使用帶密碼的key對TargetFiles重新簽名,最後由重簽名的TargetFiles來生成最終的ROM。
可以使用Android源碼樹中自帶的工具「development/tools/make_key」來生成帶密碼的RSA公私鑰對(實際上是通過openssl來生成的): $ development/tools/make_key media 『/C=CN/ST=Sichuan/L=Cheng/O=MyOrg/OU=MyDepartment/CN=MyName』 上面的命令將生成一個二進制形式(DER)的私鑰文件「media.pk8」和一個對應的X509公鑰證書文件「media.x509.pem」。其中,/C表示「Country Code」,/ST表示「State or Province」,/L表示「City or Locality」,/O表示「Organization」,/OU表示「Organizational Unit」,/CN表示「Name」。前面的命令生成的RSA公鑰的e值為3,可以修改development/tools/make_key腳本來使用F4 (0×10001)作為e值(openssl genrsa的-3參數改為-f4)。
也可以使用JDK中的keytool來生成公私鑰對,第三方APK簽名一般都是通過keytool來生成公私鑰對的。
可以使用openssl x509命令來查看公鑰證書的詳細信息: $ openssl x509 -in media.x509.pem -text -noout or, $ openssl x509 -in media.x509.pem -inform PEM -text -noout
還可以使用JDK中的keytool來查看公鑰證書內容,但其輸出內容沒有openssl x509全面: $ keytool -printcert -v -file media.x509.pem
有了key之後,可以使用工具「build/tools/releasetools/sign_target_files」來對TargetFiles重新簽名: $ build/tools/releasetools/sign_target_files_apks -d new_keys_dir -o target_files.zip target_files_resigned.zip 其中,new_keys_dir目錄中需要有四個key(media, platform, shared, releasekey)。注意:這里的releasekey將代替默認的testkey(請參考build/tools/releasetools/sign_target_files腳本實現),也就是說,如果某個apk的Android.mk文件中的LOCAL_CERTIFICATE為testkey,那麼在生成TargetFiles時是使用的build/target/proct/security/testkey來簽名的,這里重新簽名時將使用new_keys_dir/releasekey來簽名。
uild/tools/releasetools/sign_target_files_apks是通過host/linux-x86/framework/signapk.jar來完成簽名的。也可以直接使用host/linux-x86/framework/signapk.jar來對某個apk進行簽名: $ java -jar signapk [-w] publickey.x509[.pem] privatekey.pk8 input.jar output.jar 其中,」-w」表示還對整個apk包(zip包)進行簽名,並把簽名放在zip包的comment中。
對於第三方應用開發者而言,對APK簽名相對要簡單得多。第三方應用開發一般採用JDK中的keytool和jarsigner來完成簽名密鑰的管理和APK的簽名。
使用keytool來生成存儲有公私鑰對的keystore: $ keytool -genkey -v -keystore my-release-key.keystore -alias mykey -keyalg RSA -keysize 2048 -validity 10000
查看生成的密鑰信息: $ keytool -list -keystore my-release-key.keystore -alias mykey -v or, $ keytool -list -keystore my-release-key.keystore -alias mykey -rfc (註:獲取Base64格式的公鑰證書,RFC 1421)
導出公鑰證書: $ keytool -export -keystore mystore -alias mykey -file my.der (註:二進制格式公鑰證書,DER) $ keytool -export -keystore mystore -alias mykey -file my.pem -rfc (註:Base64格式公鑰證書,PEM)
對APK進行簽名: $ jarsigner -verbose -keystore my-release-key.keystore my_application.apk mykey
驗證簽名: $ jarsigner -verify -verbose -certs my_application.apk
在進行Android二次開發時,有時需要把build/target/proct/security下面的公私鑰對轉換為keystore的形式,可以參考這篇文章:把Android源碼中的密碼對轉換為keystore的方法。
❼ apk簽名是什麼意思
apk簽名相當於程序的身份識別代碼。
是Android application package英文縮寫。
它是為了確保消息來源的真實性,同時確保消息不會被第三方篡改。於是就產生了apk簽名。
在apk中寫入一個「指紋」。指紋寫入以後,Apk中有任何修改,都會導致這個指紋無效,Android系統在安裝Apk進行簽名校驗時就會不通過,從而保證了安全性。
(7)什麼是android簽名擴展閱讀:
作用
1、apk簽名用於程序編譯打包之後,手機在運行程序之前會先去驗證程序的簽名(可以看作類似於我們電腦上常說的md5)是否合法,只有通過了驗證的文件才會被運行,所以簽名軟體的作用的讓文件通過手機的驗證為合法,不同的手機、系統是對應不同的簽名的。
2、可以用簽名工具來更改。比如手機簽名工具ZipSigner 2,可以對手機上的文件進行直接簽名,支持apk、zip及jar格式,方便刷機或漢化的朋友。有些愛好修改安卓apk軟體的用戶有時候需要對apk文件進行修改。
但是如果在電腦上操作的話,打包簽名是十分復雜的,還必須安裝java環境,可以說打包一個包是十分麻煩的,這款簽名工具可以解決上述遇到的問題。
3、應用程序模塊化:Android 系統可以允許同一個證書簽名的多個應用程序在一個進程里運行,系統實際把他們作為一個單個的應用程序,此時就可以把我們的應用程序以模塊的方式進行部署,而用戶可以獨立的升級其中的一個模塊。