日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数字签名相关

發布時間:2023/12/9 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数字签名相关 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
android 創建數字簽名應用程序
一些人說android只支持BKS證書。不知道真還是假,所以首先創建了BKS證書。
步驟:
1、下載bcprov-jdk16-141.jar,放到\jre\lib\ext目錄下
2、修改文件 ?jre6\lib\security\java.security, 在文件中添加: ?security.provider.10=org.bouncycastle.jce.provider.BouncyCastleProvider
? ?在這個文件中找到security.provider字樣,后面序號遞增,本機遞增到10
3、創建keystore。命令:
? ? ? keytool -genkey -alias <別名> -keypass <密鑰口令> ?-keyalg Test -keysize 1024 -validity 365 -keystore <庫文件名,如runcerts.keystore> -storepass <證書庫密碼> -dname "cn=testUsr, ou=產品部, o=XXX公司, c=CN, S=shandong" -storetype BKS -provider org.bouncycastle.jce.provider.BouncyCastleProvider
?4、簽名及驗證
? ?//讀取密鑰庫:
? ?FileInputStream is=new FileInputStream("C:\\Inetpub\\runcerts.keystore");
? ? KeyStore ks=KeyStore.getInstance("BKS","BC");
? ? ks.load(is,"123456".toCharArray());
? ?is.close();
??
//讀取私鑰
?PrivateKey priKey1=(PrivateKey)ks.getKey("test2", "123456".toCharArray());
? privateKeyString =getKeyString(priKey1);
//簽名
? ?SignText=DataSign(plainText,privateKeyString);?


//以下驗證 ?
? ? //獲得證書
? Certificate certificate=ks.getCertificate("test2");
? //獲得證書
? PublicKey publicKey1=certificate.getPublicKey();
??
? publicKeyString=getKeyString(publicKey1);
??
//驗證
? byte[]plainText1="Happy New Year!!Email:@qq.com".getBytes();?
? boolean verySign=verify(plainText1,publicKeyString,SignText);
? String s2 = new Boolean(verySign).toString();
? System.out.print("驗證結果:"+s2+"/n");


?

說明:大體是這個步驟,具體還有一些細節代碼沒有粘貼。




?
Android應用數字簽名詳解
標簽: androidandroid studiokeytool-簽名
2015-11-26 15:23 5163人閱讀 評論(0) 收藏 舉報
? 分類:
Android應用開發(94) ?
版權聲明:本文為博主原創文章,未經博主允許不得轉載。
目錄(?)[+]
目錄
? 目錄
? 概述
? 數字簽名證書生成方法
o 命令行工具keytooljarsinger
o Android Studio
o  小結
? 查看應用簽名信息
o 查看自簽名證書的信息
o 查看第三方應用或Android系統應用簽名證書信息
________________________________________
概述
Android系統要求所有的應用必須被證書進行數字簽名之后才能進行安裝。android系統通過該證書來確認應用的作者,該證書是不需要權威機構認證的,一般情況下應用都是用開發者的自簽名證書,該證書是確保應用程序和應用程序作者之間建立信任關系,而不是用來決定用戶可以安裝哪些應用程序。
應用進行數字簽名的好處和注意事項如下:
1. Android所有的應用程序必須要有數字證書簽名,Android系統不會安裝一個沒有數字證書簽名的程序。
2. Android系統中,系統app使用的是平臺證書簽名,而第三方app一般使用開發者的自簽名證書。
3. Release版本的第三方app(例如淘寶、支付寶、微信),必須使用一個合適私鑰生成的數字證書來給程序進行簽名,并且保證每次的迭代新版本都是使用相同的證書進行數字簽名。不然的話,新版本和舊版本的數字證書不一致,Android系統會認為這是兩個不同的app,導致更新等操作失敗。
4. 數字證書是存在有效期的,這也決定了app的預計生命周期,如果數字證書超期失效,則應用無法安裝或者無法正常升級。
5. Android提供了基于簽名的權限機制,那么一個應用程序就可以為另一個以相同證書簽名的應用程序公開自己的功能。以同一個證書對多個應用程序進行簽名,利用基于簽名的權限檢查,你就可以在應用程序間以安全的方式共享代碼和數據了。 不同的應用程序之間,想共享數據,或者共享代碼,那么要讓他們運行在同一個進程中,而且要讓他們用相同的證書簽名。
________________________________________
數字簽名證書生成方法
聲明:實驗生成的keystore只是作為演示使用,并沒有實際應用到項目中。大家參考時也要根據我的博客手工修改部分參數,切忌無腦照抄!
Android是使用標準的Java工具keytool和jarsigner來生成數字證書,而目前市場上第三方IDE(Android Studio和Eclipse)都是通過圖形化系統幫我們封裝了這兩個工具的具體執行步驟。?
接下來,我會介紹兩種生成數字簽名證書的方式,分別通過命令行和Android Studio進行生成。
________________________________________
命令行工具(keytool&&jarsinger)
由于Android的數字簽名證書是用java標準工具生成的(路徑為:$JAVA_HOME/bin目錄下),那我們當然可以在命令行生成數字證書了,具體方法如下。
1. 使用keytool生成數字簽名證書。示例命令如下:
keytool -genkey -v -keystore my-release-key.keystore -alias alias_name -keyalg RSA -keysize 2048 -validity 10000
? 1
? 1
參數詳解:
? -keystore : 指定生成數字簽名證書的文件名和路徑。
? -alias:指定證書的別名。
? -keyalg:指定生成證書所需要的算法。
? -keysize:指定證書大小。
? -validity:指定證書的有效期,單位為天。
示例截圖如下:?
?
1. 使用生成的keystore,利用jarsinger為應用進行簽名。示例命令如下:
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my-release-key.keystore my_application.apk alias_name
? 1
? 1
參數詳解:
? -sigalg:簽名算法的名稱。
? -digestalg:摘要算法的名稱。
? -keystore : 指定簽名證書的位置。
? alias_name:簽名證書的別名。
示例截圖如下:
?
1. google官方同時推薦使用zipalign工具對簽名的apk進行優化。該工具位于Android SDK的/build-tools/版本號/目錄下。示例命令如下:
zipalign -v 4 your_project_name-unaligned.apk your_project_name.apk
? 1
? 1
示例截圖如下:?
?
________________________________________
Android Studio
使用命令行的方式可以顯得geek,并且讓我們更多的了解實現細節。但是,平時應用開發中更多的是注重效率,因此,我們可以采用目前google官方推薦的AS幫我們實現應用數字簽名功能。具體步驟如下。
1. 選擇編譯Module->Build->Generate Signed APK->選擇編譯Module->Next。
?
1. 選擇Create new,創建一個新的數字簽名證書。?
?
2. 填寫證書信息。?
?
填寫完成之后,我們點擊OK,就可以生成我們的數字簽名證書了。
上述工作完成后,我們就生成了數字簽名證書,但是還沒有對我們的apk進行簽名。想要用生成的數字證書對apk進行簽名,還需要修改當前Module的build.gradle文件,增加簽名命令,具體內容如下:
android {
? ? compileSdkVersion 19
? ? buildToolsVersion "19.1.0"


? ? defaultConfig {
? ? ? ? applicationId "××××××"
? ? ? ? minSdkVersion 8
? ? ? ? targetSdkVersion 19
? ? }


? ? signingConfigs {
? ? ? ? debug {
? ? ? ? ? ? // 配置debug版本的數字簽名證書
? ? ? ? ? ? storeFile file("/home/wzy/Documents/keystore/simple-weather.jks")
? ? ? ? ? ? storePassword "123456"
? ? ? ? ? ? keyAlias "release-key"
? ? ? ? ? ? keyPassword "123456"
? ? ? ? }
? ? ? ? release {
? ? ? ? ? ? // 配置release版本的數字簽名證書(為了方便,這里的release版本和debug版本共用一個數字簽名證書)
? ? ? ? ? ? storeFile file("/home/wzy/Documents/keystore/simple-weather.jks")
? ? ? ? ? ? storePassword "123456"
? ? ? ? ? ? keyAlias "release-key"
? ? ? ? ? ? keyPassword "123456"
? ? ? ? }
? ? }


? ? buildTypes {
? ? ? ? release {
? ? ? ? ? ? // 配置release版本的數字簽名
? ? ? ? ? ? signingConfig signingConfigs.release
? ? ? ? ? ? minifyEnabled false
? ? ? ? ? ? proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
? ? ? ? }
? ? ? ? debug {
? ? ? ? ? ? // 配置debug版本的數字簽名
? ? ? ? ? ? signingConfig signingConfigs.debug
? ? ? ? }
? ? }
? ? lintOptions {
? ? ? ? abortOnError false
? ? }
}
? 1
? 2
? 3
? 4
? 5
? 6
? 7
? 8
? 9
? 10
? 11
? 12
? 13
? 14
? 15
? 16
? 17
? 18
? 19
? 20
? 21
? 22
? 23
? 24
? 25
? 26
? 27
? 28
? 29
? 30
? 31
? 32
? 33
? 34
? 35
? 36
? 37
? 38
? 39
? 40
? 41
? 42
? 43
? 1
? 2
? 3
? 4
? 5
? 6
? 7
? 8
? 9
? 10
? 11
? 12
? 13
? 14
? 15
? 16
? 17
? 18
? 19
? 20
? 21
? 22
? 23
? 24
? 25
? 26
? 27
? 28
? 29
? 30
? 31
? 32
? 33
? 34
? 35
? 36
? 37
? 38
? 39
? 40
? 41
? 42
? 43
當然,上述命令Android Studio也提供了圖形化界面進行操作,可以直接在Module Settings進行設置,截圖如下(ps:我還是喜歡手動配置)。?
?
________________________________________
 小結
Android應用可以在debug和release兩種模式下進行數字證書簽名。在Android Studio中,我們直接點擊Run使用的是debug模式,我們在命令行敲擊bash gradle :$module_name:build使用的是release模式。?
debug模式下簽名是為了開發調試,release模式下進行簽名則是為了正式發布。?
Android SDK提供了一個不需要密碼的證書用于在debug模式下進行簽名調試,默認存儲在$HOME/.android/debug.keystore,但是release版本必須使用自己的數字簽名證書。
________________________________________
查看應用簽名信息
首先,為什么我們需要查看應用簽名信息呢?
是因為,很多第三方提供的SDK服務為了區分應用必須讓我們提供數字簽名的SHA1值,例如百度地圖定位SDK、高德地圖定位SDK,為了使用這些服務,我們就必須學會如何查看應用簽名信息。
________________________________________
查看自簽名證書的信息
我們自簽名的證書,由于keystore文件存在于我們可訪問的路徑下,我們可以直接通過keytool命令去查看證書信息。
示例命令如下:
keytool -v -list -keystore ?my-release-key.keystore
? 1
? 1
輸入命令后,是需要輸入簽名密碼的。
參數詳解:
? -list:列出密鑰庫中的條目。
? -keystore:數字證書位置。
示例截圖如下:?
?
________________________________________
查看第三方應用或Android系統應用簽名證書信息
其實系統應用對開發者來說也是第三方應用,但是只要我們能拿到它的apk,就能知道它的應用簽名信息。以我目前使用的樂運動apk為例(com.oxygen.www_3.0_40.apk)。
1. 用unzip命令解壓apk。
unzip com.oxygen.www_3.0_40.apk
? 1
? 1
1. 進入META-INF文件,找到其中的CERT.RSA文件。
2. 使用keytool工具進行信息查看,具體命令如下:
keytool -printcert -file CERT.RSA
? 1
? 1
參數詳解:
? -printcert:打印證書內容
示例截圖如下:?
?

?
加密解密,數字簽名及證書
標簽: 解密
2016-12-12 16:43 1129人閱讀 評論(0) 收藏 舉報
? 分類:
加密解密 android開發(28) ?
版權聲明:本文為博主原創文章,未經博主允許不得轉載。
目錄(?)[+]
對稱加密
分類
1. 數據加密標準DES(56位密鑰長度,密鑰太短,抗窮舉能力差,安全性不夠)
2. 三重DES-DESede(112和168兩種密鑰長度,抗窮舉能力顯著增強, 但由于進行了多重des迭代,造成處理速度慢,效率不高)
3. 高級數據加密標準AES(128和192及256三種密鑰長度,搞窮舉能力強,速度比des系列加密快,為替代des系列加密算法而生)
對稱加密步驟
1. 由消息傳遞雙方約定密鑰
2. 消息發送方使用密鑰對明文加密,并將密文發送給接收方
3. 消息接收方使用密鑰對密文解密獲取明文
?
對稱加密的問題
1. 甲與乙通信,甲乙事先需要打電話或者發郵件或者面對面約定密鑰key1
2. 甲與丙通信,甲丙事先需要打電話或者發郵件或者面對面約定密鑰key2
3. 甲與丁通信,甲丁事先需要打電話或者發郵件或者面對面約定密鑰key3
如果甲要與N方通信,就得事先打電話或者發郵件或者面對面與N方約定N個密鑰,以瀏覽器為例,其會與數不清的網站通信,瀏覽器開發者不可能事先打電話或者發郵件或者面對面與各個網站開發者約定密鑰。
所以問題來了,通信兩方該如何事先約定密鑰呢,顯然打電話或者發郵件或者面對面這種人工約定密鑰的方式是不可行的,這時需要非對稱加密算法來解決這個問題了。
非對稱加密
分類
非對稱加密算法也比較多,典型常用的有dsa,rsa算法
特點
1. 每個通信方都有一對密鑰,公鑰和私鑰,公鑰對外公開,私鑰自己保存不對外公開
2. 公鑰加密的數據必須用其對應的私鑰才能解密,私鑰加密的數據必須用其對應的公鑰才能解密
非對稱加密的這些特點,即可解決上述人工交換對稱加密算法密鑰的問題,具體見下圖
加密流程
?
以上就是對數據加密的介紹,可以看到,數據加密可以保證縱使數據被敵人竊取,也無法識別出具體內容,達到數據的保密性。但假如竊取者將這個無法識別的數據替掉,換成具有誤導性錯誤的數據發送給數據接收方,那么數據接收方該如何識別收到的數據是否真實的,沒有被竄改的呢?如下圖這種情況
?
要解決上面問題,需要利用數據摘要和簽名對數據進行完整性驗證及身份識別
數據摘要
定義
固名思義,就是取數據的摘要,大綱,特征碼
分類
主要有md系列和sha系列算法?
1. md系列又分md2,md4,md5等,比較常用的就是md5,無論數據有多長,md算法都會生成一個128位的摘要,來表征這個數據。?
2. sha系列也分很多種,sha-0,sha-1,sha-2,sha-256等等,常用的是sha-1算法,其會對數據生成一個160位的摘要,來表征這個數據。
摘要算法驗證數據完整性流程
1. 通信雙方約定摘要算法
2. 數據發送方獲取數據的摘要m,將數據和其摘要m一起發給接收方
3. 接收方取得獲取的數據,并利用約定的摘要算法計算數據的摘要m2,與收到的摘要m比較,相等說明數據沒有被更改
但上述驗證其實是有bug的,見如下圖?
?
如何解決bug了,這時需要用到mac算法
MAC消息認證碼算法
MAC是結合了摘要和對稱加密算法的摘要算法(個人認為也是一種簽名算法,后面會看不到其不僅可以驗證完整性還可以認證數據源),可以認為就是相比前的摘要算法多了一步,就是對摘要結果進行一次加密后的數據作為最終結果。
分類
主要有HmacMD5, HMacSHA1, HMacSH256, HMacSHA384等等,與前面的摘要算法都是對應的
mac消息認證算法驗證數據完整性流程
1. 通信雙方約定mac算法和密鑰
2. 數據發送方獲取數據的認證碼m,將數據和其認證碼m一起發給接收方
3. 接收方取得傳來的數據,并利用約定的mac算法和密鑰計算數據的認證碼m2,與收到的認證碼m比較,相等說明數據沒有被更改
看上去與摘要驗證流程相比沒有差別,就多了一個密鑰,但就是多的這個密鑰,解決了前面摘要算法進行數據完整性驗性的bug,具體見下圖
?
另外從上圖也可以看出,mac消息認證碼不僅可以驗證數據完整性,還可以認證數據發送方身份,因為mac所用的密鑰只有通信雙方才知道,截竊不知道這個key就無法生成正確的code,數據接收方就無法通過驗證。當數據接收方一旦通過了驗證,不僅說明數據是完整的,并且說明數據發送方沒有被委造。
數字簽名
什么是數字簽名
數字簽名可以認為是帶密鑰的數據摘要算法,并且這種密鑰使用的是公鑰和私鑰,是數據摘要和非對稱加密的結合體。類似手寫簽名,主要是用來驗證數據完整性和認證數據來源。
其校驗和認證流程分為以下幾步:?
1. 消息發送方公布自己的公鑰?
2. 消息發送方利用自己的私鑰對數據簽名得到簽名值,并將數據和簽名值一起發送給接收方?
3. 接收方利用發送方的公鑰對數據和簽名值進行驗簽
?
?
可見與上述消息認證碼校驗流程非常相似,并且可以知道簽名時是私鑰加密,公鑰解密,與之前加密數據(交換密鑰)時相反,那里是公鑰加密,私鑰解密
簽名算法分類
主要包括RSA,DSA和ECDSA共三種算法
數字證書
回顧前面瀏覽器與銀行通過非對稱加密算法進行交互通信密鑰的流程圖
?
要解決這個問題用到數字證書
數字證書是什么
數字證書類似我們的身份證,用于標識通信方的身份,其本身就是一個格式規范的文件,如下圖所示
?
其中最重要的信息有簽發機構,簽發機構簽名,證書的持有者名稱,證書持有者的公鑰
證書每個人都可以制作,但需要到權威機構作認證,否則沒有可信性。
有了證書,就不用擔心假冒銀行網站了,仍以前面例子為例,瀏覽器向銀行請求公鑰,其實應該是請求銀行的證書(證書里有公鑰),假設瀏覽器請求被劫持到一個假冒銀行,瀏覽器收到假冒銀行自己的制作的證書,瀏覽器發現這個沒有被權威機構認證,不可信,就會中斷通信,所以沒安全問題。再假如假冒銀行拿到真招行的數字證書返回給瀏覽器(這個可以拿到,證書是公開的,想拿都可以拿),瀏覽器通過驗證,發現證書是真的,就用證書上的真招行的公鑰加密通過密鑰key返回給假冒銀行,這時也沒有問題,因為這個key是用真招行的公鑰加密的,需要用真招行的私鑰來解密,而假銀行沒有招行的私鑰,無法解密,他得不到真實的通信密鑰key,這也是安全的,密鑰沒有泄露。
前面一直說瀏覽器可以判斷一個證書是經過權威機構認證了的還是自己制作的不可靠的證書,這是如何做到的呢?見下圖
?
瀏覽器已經內置了這些權威證書認證機構的公鑰,所以可以利用這些公鑰來判斷證書是不是那個權威機構認證過的。

簽名證書VS加密證書
博客分類:?
? PKI
數字證書?
從證書的用途來看,數字證書可以分為:
?簽名證書:主要用于對用戶信息進行簽名,以保證信息的不可否認性。
?加密證書:主要用于對用戶傳送信息進行加密,以保證信息的真實性和完整性。
?
什么是加密證書和簽名證書??
? ? ? ?
? ? 數字證書可分為簽名證書和加密證書。


? ? 簽名證書主要用于對用戶信息進行簽名,以保證信息的有效性和不可否認性;


? ? 加密證書主要用于對用戶傳送信息進行加密,以保證信息的保密性和完整性。


? ? 每個證書都包含一對密鑰即簽名公鑰和簽名私鑰,加密公鑰和加密私鑰,將簽名證書和加密證書的公鑰公布于外。


? ? 簽名時,用簽名證書的私鑰進行簽名,其他用戶可以利用公布于外網的簽名公鑰對簽名進行驗證。


? ? 加密時,用戶B利用用戶A公布于外網的加密公鑰對信息進行加密傳送給用戶A,用戶A利用自己的加密私鑰對加密后的信


? ? 息進行解密得到完整的明文信息。
?
=================================================================
?
數字證書格式-摘要
?版本 :該證書使用的是哪種版本的X.509標準
?序列號:本項是CA分配給每一個證書的唯一的數字型編號,證書序列號的長度在不同的
? CA系統中是可配置的。
?簽名算法:本項用來指定頒發機構CA簽發證書時使用的簽名算法
?頒發者:issuer 本項標識了頒發該證書的機構DN
?有效期:validity 本項是證書的有效期和終止日期
?主題:subject 證書擁有者的唯一是別名,這個字段必須是非空的。
? ? ?有效的DN(Distinct Name)標識:
? ? ? ?c ? ? ? ? ?country code (一般是c=cn)
? ? ? ?o ? ? ? ? ?organization(組織)
? ? ? ?ou ? ? ? ?organizational unit name(組織單位名)
? ? ? ?cn ? ? ? ?common name (普通名)
? ? ? ?e ? ? ? ? ?email (郵件地址)
? ? ? ?l ? ? ? ? ? locality name (地址)
? ? ? ?st ? ? ? ? state, or province name (國家或省份名)
? ? ? ?dc ? ? ? ?domain Component (領域)
? ? ? ?uid ? ? ?user id (用戶標識符)
? ? ? ?t ? ? ? ? ?title (標題)
? ? ? ?sn ? ? ? ?device serial number name
?公鑰 public key: 本項用來標識公鑰,公鑰算法和公鑰長度。
?微縮圖算法:和證書本身沒多大關系,就是哈希算法,通常用MD5或SHA1.
?微縮圖:是指對整個證書進行hash運算之后生成的一段數據,就是對證書的哈希摘要。


android keystore相關
android要求所有的程序必須有簽名,否則就不會安裝該程序。在我們開發過程中,adt使用debug keystore,在 preference->android->buid中設置。debug的keystore默認有效期為一年,如果你是從一年前開始開發 android程序,那么很可能出現debug keystore過期,導致你無法生成 apk文件。我調了一下系統時間,就出現以下錯誤。此時你只要刪除debug keystore就行,系統又會為你生成有效期為一年的私鑰。
當debug keystore過期,會出現如下的錯誤:
Error generating final archive: Debug Certificate expired on…
debug keystore刪除方法:
進入C:\Documents and Settings\Administrator\.android 刪除路徑下的debug.keystore及 ddms.cfg。
(不同環境下的目錄可能略有不同,可在eclipse中查找此路徑:Window->Preferences->Android->Build下 Default debug keystore)
然后重新導入即可。
ubuntu環境下的解決辦法: ?rm -rf ?~/.android/debug.keystore?


當你release時,你可以用 右擊項目->android tools->export signed android package生成簽名的包。再此過程中,如果你還沒有你自己的私鑰,adt會自動調用 keytool 來為你生成。請保護好你的私鑰,否則被人盜用的話,就用攻擊你的簽名程序了。
release前還應注意版本號,在manifest.xml中有兩個字段android:versionCode="1"和 android:versionName="1.0",其中前者是給程序或者android使用,以1遞增。后者是給用戶看的,在這里你就可以使用主版本 號 次版本號 build號等字符串。
---------------------------------------
keystore的生成:
cmd下:
進入到jdk的bin目錄,這樣的話,android.keystore文件就會生成在這個目錄下,簽名的時候我們需要這個文件
D:\Program Files\Java\jdk1.6.0_20\bin>keytool -genkey -alias android.keystore -keyalg RSA -validity 20000 -keystore android.keystore
輸入keystore密碼:
再次輸入新密碼:
您的名字與姓氏是什么?
? [Unknown]: ?qiaoling您的組織單位名稱是什么?
? [Unknown]: ?www.chinaandroid.com
您的組織名稱是什么?
? [Unknown]: ?www.chinaandroid.com
您所在的城市或區域名稱是什么?
? [Unknown]: ?haidian
您所在的州或省份名稱是什么?
? [Unknown]: ?BJ
該單位的兩字母國家代碼是什么
? [Unknown]: ?86
CN=qiaoling, OU=www.chinaandroid.com, O=www.chinaandroid.com, L=haidian, ST=BJ, C=86 正確嗎?
? [否]: ?Y
輸入<android.keystore>的主密碼(如果和 keystore 密碼相同,按回車):
其中參數-validity為證書有效天數,這里我們寫的大些10000天。還有在輸入密碼時沒有回顯(盡管輸就是啦) 并且 退格,tab等都屬于密碼內容,這個密碼在給.apk文件簽名的時候需要.
?
然后簽名:
Eclipse中,右擊需要簽名的工程-->android tools-->export signed application package...
出現下面對話框,選擇需要簽名的工程
next,選擇上面生成的android.keystore文件位置和設置的密碼
next
next,選擇簽名生成文件的位置和名稱




keykeytool錯誤: java.io.FileNotFoundException: android.key (Permission denied)
tool 在JDK的/bin目錄下,比如:/opt/jdk/bin
用以下的命令生成一個證書:
keytool -genkey -alias android.key -keyalg RSA -validity 20000 -keystore android.key
老是報如題的錯誤:
后來才知道是因為當前的目錄下沒有寫的權限,所以需要指定一個路徑來存放android.key:
keytool -genkey -alias android.key -keyalg RSA -validity 20000 -keystore /<MY_PATH>/android.key
注: 該單位的兩字母國家代碼是什么(中國是 CN)
打包的時候如果出現: jarsigner: 找不到 android.key 的證書鏈。android.key 必須引用包含專用密鑰和相應的公共密鑰證書鏈的有效密鑰庫密鑰條目。
那么可能是 -alias 部分多了路徑名導致與其后面的keystore不同名。
查看證書信息:
keytool -list -v -keystore android.key -storepass <PSW>




keystore信息的查看
本文系轉載,原文地址:http://dev.10086.cn/cmdn/bbs/thread-58334-1-1.html
?
keystore信息的查看:
keytool -list -v -keystore e:\keytool\yushan.keystore -storepass 123456
顯示內容:
---------------------------------------------------------------------
Keystore 類型: JKS
Keystore 提供者: SUN


您的 keystore 包含 1 輸入


別名名稱: yushan
創建日期: 2009-7-29
項類型: PrivateKeyEntry
認證鏈長度: 1
認證 [1]:
所有者:CN=yushan, OU=xx公司, O=xx協會, L=湘潭, ST=湖南, C=中國
簽發人:CN=yushan, OU=xx公司, O=xx協會, L=湘潭, ST=湖南, C=中國
序列號:4a6f29ed
有效期: Wed Jul 29 00:40:13 CST 2009 至Thu Jul 29 00:40:13 CST 2010
證書指紋:
MD5:A3:D7:D9:74:C3:50:7D:10:C9:C2:47:B0:33:90:45:C3
SHA1:2B:FC:9E:3A:DF:C6:C4:FB:87:B8:A0:C6:99:43:E9:4C:4A:E1:18:E8
簽名算法名稱:SHA1withRSA
版本: 3
--------------------------------------------------------------------


缺省情況下,-list 命令打印證書的 MD5 指紋。而如果指定了 -v 選項,將以可讀格式打印證書,如果指定了 -rfc 選項,將以可打印的編碼格式輸出證書。




keytool -list -rfc -keystore e:\yushan.keystore -storepass 123456
顯示:
-------------------------------------------------------------------------------------------------------
Keystore 類型: JKS
Keystore 提供者: SUN


您的 keystore 包含 1 輸入


別名名稱: yushan
創建日期: 2009-7-29
項類型: PrivateKeyEntry
認證鏈長度: 1
認證 [1]:
-----BEGIN CERTIFICATE-----
MIICSzCCAbSgAwIBAgIESm8p7TANBgkqhkiG9w0BAQUFADBqMQ8wDQYDVQQGDAbkuK3lm70xDzAN
BgNVBAgMBua5luWNlzEPMA0GA1UEBwwG5rmY5r2tMREwDwYDVQQKDAh4eOWNj+S8mjERMA8GA1UE
CwwIeHjlhazlj7gxDzANBgNVBAMTBnl1c2hhbjAeFw0wOTA3MjgxNjQwMTNaFw0xMDA3MjgxNjQw
MTNaMGoxDzANBgNVBAYMBuS4reWbvTEPMA0GA1UECAwG5rmW5Y2XMQ8wDQYDVQQHDAbmuZjmva0x
ETAPBgNVBAoMCHh45Y2P5LyaMREwDwYDVQQLDAh4eOWFrOWPuDEPMA0GA1UEAxMGeXVzaGFuMIGf
MA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCJoru1RQczRzTnBWxefVNspQBykS220rS8Y/oX3mZa
hjL4wLfOURzUuxxuVQR2jx7QI+XKME+DHQj9r6aAcLBCi/T1jwF8mVYxtpRuTzE/6KEZdhowEe70
liWLVE+hytLBHZ03Zhwcd6q5HUMu27du3MPQvqiwzTY7MrwIvQQ8iQIDAQABMA0GCSqGSIb3DQEB
BQUAA4GBAGoQQ1/FnTfkpQh+Ni6h3fZdn3sR8ZzDMbOAIYVLAhBb85XDJ8QZTarHbZMJcIdHxAl1
i08ct3E8U87V9t8GZFWVC4BFg/+zeFEv76SFpVE56iX7P1jpsu78z0m69hHlds77VJTdyfMSvtXv
sYHP3fxfzx9WyhipBwd8VPK/NgEP
-----END CERTIFICATE-----
2、查看md5指紋驗證
輸入keytool -list -v -alias ?android.keystore -keystore 再加上所要查看的keystore所在的路徑
如: keytool -list -v -alias androiddebugkey -keystore d:\android.keystore,回車
-alias android.keystore 這個是別名
-keystore d:\android.keystore 具體位置的密鑰庫
要求輸入密碼,密碼是android,至此就可以拿到MD5認證指紋了


keytool -genkeypair -keystore zrong2.p12 -storetype pkcs12 -validity 8050
keytool -list -keystore zrong2.p12 -storetype pkcs12 -v
二、使用p12證書為apk簽名
將 p12 文件轉成jks或者keystore文件就可以在ADT中使用了。
先創建一個空的 jks文件
1. keytool -genkey -alias anyname -keystore yourcertificate.jks
2. keytool -genkey -alias anyname -keystore yourcertificate.keystore
導入p12證書
1. keytool -importkeystore -srckeystore yourcertificate.p12 -srcstoretype PKCS12 -destkeystore yourcertificate.jks -deststoretype JKS
2. keytool -importkeystore -srckeystore yourcertificate.p12 -srcstoretype PKCS12 -destkeystore yourcertificate.keystore -deststoretype JKS
現在可以使用這個JKS文件了。






總結

以上是生活随笔為你收集整理的数字签名相关的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。