91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

關于加密、簽名及證書

發布時間:2020-07-27 05:09:13 來源:網絡 閱讀:456 作者:jch_zhao 欄目:安全技術

   去年在開發一個安卓小游戲的時候,還煞有其事地對apk包做了個人簽名。當時只是照貓畫虎的按書上說的步驟來做,也沒深究為什么。最近比較詳細的了解了一下java的安全機制,才發現原來有那么多一知半解的問題。


   先從非對稱加密的公鑰、私鑰機制說起。所謂非對稱就是指用私鑰加密的內容要用公鑰來解密(反過來用公鑰加密也一樣必須要用私鑰來解密。公、私其實是對等的一對兒,并非指技術方面,而是針對發布范圍來說的)


   有了這種加密、解密的唯一性,我們就可以有這樣一些結論:用私鑰/公鑰加密的,只有通過對應的公鑰/私鑰來解密;而能用某個公鑰/私鑰解開的,一定是用其私鑰/公鑰加密的。有點繞嘴,其實不難理解。利用這個特性,我們就可以達到一些互為驗證的目的。


然后介紹一下相關操作。先說關于keystore的:


Keystore是存儲密鑰對集合的文件,所以也叫密鑰庫文件(之前都不知道可以存儲多個)。利用jdk工具是這樣生成的:


keytool -genkey -alias mykey1 -keypass <這個key的密碼> -validity 1000 -keystore xxx.keystore


如果這個xxx.keystore文件還不存在,那么會新生成一個,同時要求輸入一個對xxx.keystore文件進行讀寫的密碼。這個和keypass后的密碼參數不需要相同。


繼續一條:

keytool -genkey -alias mykey2 -keypass <這個key的密碼> -validity 1000 -keystore xxx.keystore


這個時候xxx.keystore文件已經存在了,所以這個命令是再追加進去一個密鑰對。所以輸入第一次設定的讀寫密碼即可。


從字面意義看會以為alias是個可有可無的別名,但其實不是,這個參數是必須的,是一對密鑰的“正式”的名字。即便我們不輸入這個參數:-alias mykey1,那么系統也會自動生成一個叫做mykey的密鑰對名字;

如果沒有這個參數:-keypass <這個key的密碼>,那么系統會提示輸入。當然直接回車是設定為和庫文件的讀寫密碼相同。


那么現在呢,實際上xxx.keystore里已經存了兩個密鑰對,mykey1mykey2。可以用這個命令查看:

Keytool –list –keystore xxx.keystore,當然查看也是需要輸入密碼的


有了這些密鑰對,即可以對jar文件進行簽名了。命令是這樣的:

jarsigner -keystore xxx.keystore -storepass <文件讀寫密碼> -keypass <這個key的密碼> xxx.jar mykey1


同樣的,如果沒有這個參數:-storepass <文件讀寫密碼>,系統會要求輸入。沒有這個參數:-keypass <這個key的密碼>,一種情況是mykey1的密碼和庫密碼相同,那么就可以簽名成功。如果不同,那就會報錯。


導出公鑰為一個證書,命令是:

Keytool –export –file xxx.cer –keystore xxx.keystore –alias mykey1,輸入庫密碼后,會生成一個xxx.cer的證書文件。


一個庫里可以有多個密鑰,但一個證書里只有一個公鑰。用命令keytool -printcert -file xxx.cer查看證書,結果是庫密鑰列表中的一個。


私鑰一般用命令導不出來(也沒有導出的必要)。但是可以用寫代碼來導出。


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

玉山县| 霍林郭勒市| 股票| 文水县| 平谷区| 花莲县| 会宁县| 二连浩特市| 隆尧县| 容城县| 什邡市| 南皮县| 淮南市| 华容县| 呼图壁县| 沾化县| 嘉黎县| 沙河市| 日照市| 洪湖市| 北碚区| 佛冈县| 吴川市| 定西市| 红河县| 万宁市| 宜丰县| 镇赉县| 宁化县| 化隆| 九龙县| 江门市| 敦化市| 安平县| 乐至县| 朝阳县| 梅州市| 台安县| 封开县| 金平| 逊克县|