1. 什麼 是 android系統 簽名
簽名後才可以正常安裝,可以保證軟體的唯一性,可以檢驗軟體是否他人盜用;
2. android studio簽名有什麼用
我們在使用Android Studio進行應用的發布時要進行簽名,這個簽名代表一種數字認證,每個公司的簽名都不會相同的,所以是一種唯一的,別個假冒不了你的或修改你的源代碼。
3. Android簽名有什麼作用
最簡單直接的回答: 系統要求的。
Android系統要求每一個Android應用程序必須要經過數字簽名才能夠安裝到系統中,也就是說如果一個Android應用程序沒有經過數字簽名,是沒有辦法安裝到系統中的!
Android通過數字簽名來標識應用程序的作者和在應用程序之間建立信任關系,不是用來決定最終用戶可以安裝哪些應用程序。
這個數字簽名由應用程序的作者完成,並不需要權威的數字證書簽名機構認證,它只是用來讓應用程序包自我認證的。
4. 安卓簽名是什麼 安卓簽名是sha1嗎
平時我們的程序可以在模擬器上安裝並運行,是因為在應用程序開發期間,由於是以Debug面試進行編譯的,因此ADT根據會自動用默認的密鑰和證書來進行簽名,而在以發布模式編譯時,apk文件就不會得到自動簽名,這樣就需要進行手工簽名。給apk簽名可以帶來以下好處:1.、應用程序升級:如果你希望用戶無縫升級到新的版本,那麼你必須用同一個證書進行簽名。這是由於只有以同一個證書簽名,系統才會允許安裝升級的應用程序。如果你採用了不同的證書,那麼系統會要求納漏山你的應用程序採用不同的包名稱,在這種情況下相當於安裝了一個全新的應用程序。如果想升級應用程序,簽名證書要相同,包名稱要相同!2、應用程序模塊化:Android系統可以允許同一個證書簽名的多個應用程序在一個進程里運行,系統實際把他們作為一個單個的應用程序,此時就可以把我們的應用程序以模塊的方式進行部署,而用戶可以獨立的升級其中的一個模塊3、代碼或者數據共享:Android提供了基於簽名的許可權機制,那麼一個應用程序就可以為另一個以相同證書簽名的應用程序公開自己的功能。以同一個證書對多個應用程序進行簽名,利用基於簽名的許可權檢查,你就可以在應用程序間以安全的方式共享代碼和數據了。不同的應用程序之間,想共享數據,或者共享代碼,那麼要讓他們運行在同一個進程中,而且要讓他們用相同的證書簽名。
apk簽名相當於程序的身份識別代碼。
1、apk簽名用於程序編譯打包之後,手機在運行程序之前會先去驗證程序的簽名(可以看作類似於我們電腦上常搜運說的md5)是否合法,只有通過了驗證的文件才會被運行,所以簽名軟體的作用的讓文件通過手機的驗證為合法,不同的手機、系統是對應不同的簽名的。
2、可以用簽名工具來更改。比如手機簽名工具ZipSigner 2,可以對手機上的文件進行直接簽名,支持apk、zip及jar格式,方便刷機或漢化的朋友。有些愛好修改安卓apk軟體的用戶有時候需要對apk文件進行修改,但是如果在電腦上操作的話,打包簽名是十分復雜的,還必須安裝java環境,可以說打包一個包是十分麻煩的,這款簽名工具可以解決上述遇到的問題。
一、判斷Apk是否簽名用命令:jarsigner -verify -verbose -certs 1、如果有Android Debug字樣就是debug2、如果洞中已經簽名: [證書的有效期為13-8-31 下午2:31至41-1-16 下午2:31]二、判斷Apk簽名是否一致jdk 需要安裝;想查demo.apk所使用的簽名的fingerprint,可以這樣做:1、查找apk里的rsa文件 Windows 平台: > jar tf demo .apk findstr RSA linux 平台: $ jar tf demo .apk grep RSA META-INF/CERT.RSA 2、 從apk中解壓rsa文件 jar xf demo .apk META-INF/CERT.RSA 3、獲取簽名的fingerprints keytool -printcert -file META-INF/CERT.RSA 證書指紋: MD5: 5A:5A:96:63:8E:EF:FC:66:9E:BC:1C:2A:A9:1E:E5:95 SHA1: 44:BD:33:2D:C5:21:AE:78:D5:04:92:1A:39:FD:AC:01:E2:32:3C:AB SHA256: 2F:C0:A3:8C:0D:42:84:70:48:78:44:A4:2E:64:5B:50:B3:B3:1E:33:94:62:A3:9F:2F:10:DD:EF:D7:CF:02:0B 簽名演算法名稱: SHA1withRSA 版本: 3 兩個apk是否同簽名,比較簽名的MD5碼或SHA1碼 ,一樣就是相同的,反之,不是。
apk 簽名可以帶來的好處
所有的Android 應用程序都要求開發人員用一個證書進行數字簽名,Android 系統不會
安裝沒有進行簽名的應用程序。
平時我們的程序可以在模擬器上安裝並運行,是因為在應用程序開發期間,由於是以
Debug 面試進行編譯的,因此ADT 根據會自動用默認的密鑰和證書來進行簽名,而在以發
布模式編譯時,apk 文件就不會得到自動簽名,這樣就需要進行手工簽名。
給apk 簽名可以帶來以下好處:
1.、應用程序升級:如果你希望用戶無縫升級到新的版本,那麼你必須用同一個證書進
行簽名。這是由於只有以同一個證書簽名,系統才會允許安裝升級的應用程序。
如果你採用了不同的證書,那麼系統會要求你的應用程序採用不同的包名稱,在這種情
況下相當於安裝了一個全新的應用程序。如果想升級應用程序,簽名證書要相同,包名稱要相同!
2.、應用程序模塊化:Android 系統可以允許同一個證書簽名的多個應用程序在一個進
程里運行,系統實際把他們作為一個單個的應用程序,此時就可以把我們的應用程序以模塊
的方式進行部署,而用戶可以獨立的升級其中的一個模塊
3.、代碼或者數據共享:Android 提供了基於簽名的許可權機制,那麼一個應用程序就可
以為另一個以相同證書簽名的應用程序公開自己的功能。以同一個證書對多個應用程序進行
簽名,利用基於簽名的許可權檢查,你就可以在應用程序間以安全的方式共享代碼和數據了。
4.不同的應用程序之間,想共享數據,或者共享代碼,那麼要讓他們運行在同一個進程
中,而且要讓他們用相同的證書簽名。
標簽:作文經典 上一篇:夢見自己做飯什麼意思 夢見別人做飯什麼意思 下一篇:成語接龍民凋 民什麼凋什麼成語接龍android api 簽名是api調用的時候需要按照約定的參數生成一個字元串,對方接收到後校驗參數,合法後接受請求並返回結果。
所有android端的API的有效訪問URL包括以下三個部分:
1. 資源訪問路徑,如/v1/deal/find_deals;
2. 請求參數:即API對應所需的參數名和參數值param=value,多個請求參數間用&連接
如deal_id=1-85462&appkey=00000;
3. 簽名串,由簽名演算法生成
簽名演算法如下:
1. 對除appkey以外的所有請求參數進行字典升序排列;
2. 將以上排序後的參數表進行字元串連接,如...keyNvalueN;
3. 將app key作為前綴,將app secret作為後綴,對該字元串進行SHA-1計算,並轉換成16進制編碼;
4. 轉換為全大寫形式後即獲得簽名串
簽名串獲得後,將其作為sign參數附加到對應的URL中,即可正常訪問API。
注意:請保證HTTP請求數據編碼務必為UTF-8格式,URL也務必為UTF-8編碼格式。
參考代碼:
// 定義申請獲得的appKey和appSecret
String appkey = "XXXXXXXX";
String secret = "";
String apiUrl = "[api.dianping]";
// 創建參數表
Map paramMap = new HashMap ;
paramMap.put("format", "json");
paramMap.put("city", "上海");
paramMap.put("latitude", "31.21524");
paramMap.put("longitude", "121.420033");
paramMap.put("category", "美食");
paramMap.put("region", "長寧區");
paramMap.put("limit", "20");
paramMap.put("radius", "2000");
paramMap.put("offset_type", "0");
paramMap.put("has_coupon", "1");
paramMap.put("has_deal", "1");
paramMap.put("keyword", "泰國菜");
paramMap.put("sort", "7");
// 對參數名進行字典排序
String[] keyArray = paramMap.keySet.toArray(new String[0]);
Arrays.sort(keyArray);
// 拼接有序的參數名-值串
StringBuilder stringBuilder = new StringBuilder;
stringBuilder.append(appkey);
for (String key : keyArray)
{
stringBuilder.append(key).append(paramMap.get(key));
}
stringBuilder.append(secret);
String codes = stringBuilder.toString;
// 字元串連接示例
// XXXXXXXXcategory美食city上海formatjsonhas_coupon1has_deal1keyword泰國菜latitude31.21524limit20longitude121.420033offset_type0radius2000region長寧區sort7
// SHA-1編碼, 這里使用的是Apache codec,即可獲得簽名(shaHex會首先將中文轉換為UTF8編碼然後進行sha1計算,使用其他的工具包請注意UTF8編碼轉換)
/*
* 以下sha1簽名代碼效果等同
* byte[] sha = .apachemons.codec.digest.DigestUtils.sha(.apachemons.codec.binary.StringUtils.getBytesUtf8(codes));
* String sign = .apachemons.codec.binary.Hex.encodeHexString(sha).toUpperCase;
*/
String sign = .apachemons.codec.digest.DigestUtils.shaHex(codes).toUpperCase;
//簽名示例
//
1、
下載簽名應用,在手機中運行,根據提示輸入程序的包名獲得一個apk簽名字元串,最後將這個字元串填到第一步的應用簽名欄處。保存即可正常調試應用了。
2、
選擇程序-右鍵——android tools——簽名發布,按步驟生成一個簽名keystore和一個經過簽名的apk,安裝該APK到手機。
3、
選擇自己的程序,右鍵運行到手機。
4、
android 應用簽名查看方法如下:
(1) debug的apk通過Eclipse查看,如下圖:
(2) 某個keystore簽名的應用,通過
Javakeytool-list-keystoreE:Trineakeystoreappsearch.keystore查看,會要求輸入簽名密碼,默認為android。
平時我們的程序可以在模擬器上安裝並運行,是因為在應用程序開發期間,由於是以 Debug 面試進行編譯的,因此ADT 根據會自動用默認的密鑰和證書來進行簽名,而在以發布模式編譯時,apk 文件就不會得到自動簽名,這樣就需要進行手工簽名。 給apk 簽名可以帶來以下好處: 1.、應用程序升級:如果你希望用戶無縫升級到新的版本,那麼你必須用同一個證書進行簽名。這是由於只有以同一個證書簽名,系統才會允許安裝升級的應用程序。 如果你採用了不同的證書,那麼系統會要求你的應用程序採用不同的包名稱,在這種情況下相當於安裝了一個全新的應用程序。如果想升級應用程序,簽名證書要相同,包名稱要相同! 2.、應用程序模塊化:Android 系統可以允許同一個證書簽名的多個應用程序在一個進程里運行,系統實際把他們作為一個單個的應用程序,此時就可以把我們的應用程序以模塊的方式進行部署,而用戶可以獨立的升級其中的一個模塊 3.、代碼或者數據共享:Android 提供了基於簽名的許可權機制,那麼一個應用程序就可以為另一個以相同證書簽名的應用程序公開自己的功能。以同一個證書對多個應用程序進行簽名,利用基於簽名的許可權檢查,你就可以在應用程序間以安全的方式共享代碼和數據了。 4.不同的應用程序之間,想共享數據,或者共享代碼,那麼要讓他們運行在同一個進程中,而且要讓他們用相同的證書簽名。
簽名後才可以正常安裝,可以保證軟體的唯一性,可以檢驗軟體是否他人盜用;
簽名,是開發者對apk文件的加密,防止程序被盜版,因為Android系統是linux內核,程序的區分是通過包名package來區分的,那別人也可能開發一個同包名的應用,這時安桌系統就會判斷一下,如果簽名相同則替換,如果簽名不同則不允許安裝重復包名的應用。至於你說什麼時候變更,通常開發者是不能變更簽名的,你改了簽名程序就不能更新安裝了
開發Android的人這么多,完全有可能大家都把類名,包名起成了一個同樣的名字,這時候如何區分?簽名這時候就是起區分作用的。
由於開發商可能通過使用相同的Package Name來混淆替換已經安裝的程序,簽名可以保證相當名字,但是簽名不同的包不被替換。
APK如果使用一個key簽名,發布時另一個key簽名的文件將無法安裝或覆蓋老的版本,這樣可以防止你已安裝的應用被惡意的第三方覆蓋或替換掉。
這樣簽名其實也是開發者的身份標識。交易中抵賴等事情發生時,簽名可以防止抵賴的發生。
二、簽名的注意事項
Android系統要求所有的程序經過數字簽名才能安裝,如果沒有可用的數字簽名,系統將不許安裝運行此程序。不管是模擬器還是真實手機。因此,在設備或者是模擬器上運行調試程序之前,必須為應用程序設置數字簽名。
Android簽名的數字證書不需要權威機構來認證,是開發者自己產生的數字證書,即所謂的自簽名。數字證書用來標識應用程序的作者和在應用程序之間建立信任關系,而不是用來決定最終用戶可以安裝哪些應用程序。
系統僅僅會在安裝的時候測試簽名證書的有效期,如果應用程序的簽名是在安裝之後才到期,那麼應用程序仍然可以正常啟用。
可以使用標准工具-Keytool and Jarsigner-生成密鑰,來簽名應用程序的.apk文件。
簽名後需使用zipalign優化程序。
模擬器開發環境,開發時通過ADB介面上傳的程序會先自動被簽有Debug許可權,然後才傳遞到模擬器。Eclipse菜單的Window -> Preferences -> Android –> Build 下顯示的是我們默認的調試用的簽名數字證書。
正式發布一個Android應用時,必須使用一個合適的私鑰生成的數字證書來給程序簽名,不能使用ADT插件或者ANT工具生成的調試證書來發布。
三、簽名方法:
1.使用Keytool 和jarsigner工具簽名(在jdk/bin目錄下)
1.生成簽名keystore:
確保電腦上安裝了JDK,因為我們將使用JDK自帶的創建和管理數字證書的工具Keytool。在命令行下輸入如下命令:
keytool -genkey -v -keystore app.keystore -alias alias_name -keyalg RSA -validity 20000
-alias 後面跟的是別名這里是alias_name
-keyalg 是加密方式這里是RSA
-validity 是有效期這里是20000
-keystore 就是要生成的keystore的名稱這里是app.keystore
然後按回車鍵
按回車後首先會提示你輸入的密碼:這個在簽名時要用的,要記住
然後會再確認你的密碼。
之後會依次叫你輸入姓名、組織單位、組織名稱、城市區域、省份名稱、國家代碼(CN)等。
2.簽名:
jarsigner -verbose -keystore app.keystore -signedjar app_signed.apk app.apk alias_name
-keystore: keystore的名稱
-signedjar app_signed.apk: 指定簽名後生成的APK名稱
app.apk: 目標APK
然後按回車:會要求輸入剛才設置的密碼,輸入後按回車就開始簽名了。
3.查看簽名:
jarsigner -verify app_signed.apk
查看是否簽名,如果已經簽名會列印 "jar verified".
jarsigner -verify -verbose -certs app_signed.apk
查看簽名詳細信息。
4.通過zipalign工具進行優化apk(android自帶的工具,./build/tools/zipalign)
zipalign -v 4 app_signed.apk androidres.apk 對apk優化
zipalign -c -v 4 androidres.apk 查看apk是否經過優化
2.使用eclipse ADT工具簽名
在Package Explorer 窗口,右鍵,選擇Android Tools--->Export Signed Application Package 然後按照提示一步一步,生成已簽名的apk。通過eclipse也可以導出未簽名的APK文件。
註:需要輸入兩次密碼,第一次是私鑰密碼,第二次時私鑰別名的密碼。
3.eclipse在debug模式下自動簽名(無須手動配置):
在debug模式下用eclipse 的ADT為android簽名,只要應用程序在eclipse下開發,系統就會自動給apk簽名和優化。
在Eclipse中Windows > Preferences > Android > Build可以看到你keysotre的位置;
四、生成Android系統簽名
上面講的Android數字簽名大多是與Android APK相關,做CTS 認證時,需要用到Android系統簽名。為什麼需要給Android系統簽個名才能進行CTS認證呢?原來我們通過make -j4編譯出來的system.img使用的是test key,這種類型的key只適用於開發階段,而且這種秘鑰是公開的,誰都可以使用。當發布一款android產品,就需要另外給整個系統簽個名,防止被別人盜用。這種系統就是release版本的Android系統。
1、生成加密key文件
要對Android系統進行簽名,需要生成四種類型的key文件。
a)releasekey (testkey)
b)media
c)shared
d)platform
1)進入/android_src/development/tools目錄。
2)使用make_key工具生成簽名文件。需要分別生成 releasekey,media,shared,platform。
./make_key releasekey '/C=CN/ST=JiangSu/L=NanJing/O=pany/OU=Department/CN=Your Name/emailAddress=YourE-mailAddress' (系統將會提示輸入針對各種key的密碼,按照提示輸入即可)
將會生成 releasekey.pk8 和 releasekey.x509.pem文件,其中 *.pk8是生成的私鑰,而*.x509.pem是公鑰,生成時兩者是成對出現的.
註:如果出現 openssl : relocation error :openssl : symbol ...嘗試用 sudo 執行命令,問題解決了!
2.回到根目錄android_src。
命令執行的時候都最好在工程的根目錄下執行,要不然腳本用到的某些文件找不到的。
3.編譯系統
make -j4 PRODUCT-generic-user dist
其中generic 表示生成的TARGET_PRODUCT類型為generic,
user代表TARGET_BUILD_VARIANT為user版本。
編譯完成之後回在android_src/dist/目錄內生成個proct_generic-user_files開頭的zip文件.這就是我們需要進行簽名的文件系統.
4.開始簽名
./build/tools/releasetools/sign_target_files_apks -d key_directory/ out/dist/proct_mol-target_files.zip out/dist/signed_target_files.zip
通過sign_target_files_apks 腳本,完成android系統的簽名工作.
key_directory/ 表示key所在的目錄。
out/dist/proct_mol-target_files.zip 源文件。
out/dist/signed_target_files.zip 生成簽名的目標文件。
可能會出現:
ERROR: no key specified for:
CalendarWidget.apk
Contacts_yellowpage.apk
SnsAppMain.apk
這表示,簽名並沒有成功,原因是由於有些apk程序已經簽過名了或者找不到對應的key. 這需要我們對apk設置過濾,不對上面的應用進行簽名.方法如下:
通過參數"-e =" 來過濾這些應用.
./build/tools/releasetools/sign_target_files_apks -d key_directory/ -e CalendarWidget.apk= -e Contacts_yellowpage.apk= -e SnsAppMain.apk= -e out/dist/proct_mol-target_files.zip out/dist/signed_target_files.zip
輸入該命令時會提示輸入key的密碼,會出現四次密碼輸入提示。分別為四種類型的key的密碼。
5.生成image文件
./build/tools/releasetools/img_from_target_files out/dist/signed-target-files.zip signed-img.zip
用img_from_target_files 命令對生成的igned-target-files.zip文件進行打包,signed-img.zip包含了boot.img,userdate.img,system.img文件等.
6.通過fastboot下載signed-img.zip文件
fastboot update signed-img.zip
通過fastboot就可以把簽了名的系統文件燒到手機上了。
標簽:作文經典 上一篇:夢見自己做飯什麼意思 夢見別人做飯什麼意思 下一篇:成語接龍民凋 民什麼凋什麼成語接龍5. Android簽名機制之簽名文件和數字證書的作用
Android簽名機制目的是確保app的可靠通信,其一,要確定消息的來源確實是其申明
的那個人;其二,要保證信息在傳遞的過程中不被第三方篡改,即使被篡改了,也可以
發覺出來。
所謂數字簽名,就是為了解決這兩個問題而產生的,它是對非對稱加密技術與數字摘要
技術的一個具體的應用。
對於消息的發送者來說,先要生成一對公私鑰對,則穗將公鑰給消息的接收者。
如果消息的發送者有一天想給消息接收者發消息,在發送的信息中,除了要包含原始的
消息外,還要加上另外一段消息。這段消息通過如下兩步生成:
1)對要發送的原始消息提取消息摘要;
2)對提取的信息摘要用自己的私鑰加密。
通過這兩步得出的消息,就是所謂的原始信息的數字簽名。
而對於信息的接收者來說,他所收到的信息,將包含兩個部分,一是原始的消息內容,
二是附加的那段數字簽名。他將通過以下三步來驗證消息的真偽:
1)對原始消息部分提取消息摘要,注意這里使用的消息摘要演算法要和發送方使用的一孫游卜致;
2)對附加上的那段數字簽名,使用預先得到的公鑰解密;
3)比較前兩步所得到的兩段消息是否一致。如果一致,則表明消息確實是期望的發送者
發的,且內容沒有被篡改過;相反,如果不一致,則表明傳送的過程中一定出了問題,
消息不可信。
通過這種所謂的數字簽名技術,確實可以有效解決可靠通信的問題。如果原始消息在傳
送的過程中被篡改了,那麼在消息接收者那裡,對被篡改的消息提取的摘要肯定和原始
的不一樣。並且,由於篡改者沒有消息發送方的私鑰,即使他可以重新算出被篡改消息
的摘要,也不能偽造出數字簽名。
那麼數字簽名呢?
綜上所述,數字簽名其實就是只有信息的發送者才能產生的別人無法偽造的一段數字
串,這段數字串同時也是對信息的發送者發送信息真實性的一個有效證明。
不知道大家有沒有注意,前面講的這種數字簽名方法,有一個前提,就是消息的接收者
必須要事先得到正確的公鑰。如果一開始公鑰就被別人篡改了,那壞人就會被你當成好
人,而真正的消息發送者給你發的消息會被你視作無效的。而且,很多時候根本就不具
備事先溝通公鑰的信息通道。那麼如何保證公鑰的安全可信磨吵呢?這就要靠數字證書來解
決了。
所謂數字證書,一般包含以下一些內容:
證書的發布機構(Issuer)
證書的有效期(Validity)
消息發送方的公鑰
證書所有者(Subject)
數字簽名所使用的演算法
數字簽名
可以看出,數字證書其實也用到了數字簽名技術。只不過要簽名的內容是消息發送方的
公鑰,以及一些其它信息。但與普通數字簽名不同的是,數字證書中簽名者不是隨隨便
便一個普通的機構,而是要有一定公信力的機構。這就好像你的大學畢業證書上簽名的
一般都是德高望重的校長一樣。一般來說,這些有公信力機構的根證書已經在設備出廠
前預先安裝到了你的設備上了。所以,數字證書可以保證數字證書里的公鑰確實是這個
證書的所有者的,或者證書可以用來確認對方的身份。數字證書主要是用來解決公鑰的
安全發放問題。
綜上所述,總結一下,數字簽名和簽名驗證的大體流程如下圖所示:
引用鏈接: https://www.cnblogs.com/dacainiao/p/5842987.html