編輯:關於Android編程
Android安全加密專題文章索引
以上學習所有內容,對稱加密、非對稱加密、消息摘要、數字簽名等知識都是為了理解數字證書工作原理而作為一個預備知識。數字證書是密碼學裡的終極武器,是人類幾千年歷史總結的智慧的結晶,只有在明白了數字證書工作原理後,才能理解Https 協議的安全通訊機制。最終才能在SSL 開發過程中得心應手。
另外,對稱加密和消息摘要這兩個知識點是可以單獨拿來使用的。
知識點串聯:
數字證書使用到了以上學習的所有知識
通過以上內容的學習,我們要能掌握以下知識點:
數字簽名
1. 概述
數字簽名是非對稱加密與數字摘要的組合應用
2. 應用場景
校驗用戶身份(使用私鑰簽名,公鑰校驗,只要用公鑰能校驗通過,則該信息一定是私鑰持有者發布的)
校驗數據的完整性(用解密後的消息摘要跟原文的消息摘要進行對比)
3. 簽名過程
“發送報文時,發送方用一個哈希函數從報文文本中生成報文摘要,然後用自己的私人密鑰對這個摘要進行加密,這個加密後的摘要將作為報文的數字簽名和報文一起發送給接收方,接收方首先用與發送方一樣的哈希函數從接收到的原始報文中計算出報文摘要,接著再用發送方的公用密鑰來對報文附加的數字簽名進行解密,如果這兩個摘要相同、那麼接收方就能確認該數字簽名是發送方的。
數字簽名有兩種功效:一是能確定消息確實是由發送方簽名並發出來的,因為別人假冒不了發送方的簽名。二是數字簽名能確定消息的完整性。因為數字簽名的特點是它代表了文件的特征,文件如果發生改變,數字摘要的值也將發生變化。不同的文件將得到不同的數字摘要。一次數字簽名涉及到一個哈希函數、發送者的公鑰、發送者的私鑰。”
4. 使用步驟
//獲取signature 對象,初始化算法:MD2withRSA, MD5withRSA, or SHA1withRSA Signature signature = Signature.getInstance("MD5withRSA"); //創建私鑰(從磁盤上讀取) PrivateKey privateKey = (PrivateKey)SerializableUtil.readObject( "heima.privateKey"); //使用私鑰進行初始化 signature.initSign(privateKey); //傳入需要簽名的數據 signature.update(content.getBytes()); //執行簽名 byte[] sign = signature.sign(); //創建公鑰(從磁盤上讀取) PublicKey publicKey = (PublicKey) SerializableUtil.readObject( "heima.publicKey"); //使用公鑰進行初始化 signature.initVerify(publicKey); //傳入需要校驗的數據(即上面的原文) signature.update(content.getBytes()); //執行校驗 boolean verify = signature.verify(sign);
5. 總結
數字簽名一般不單獨使用,基本都是用在數字證書裡實現SSL 通信協議。下面將學習的數字證書就是基於數字簽名技術實現的。
數字證書
1. 概述
數字證書就是互聯網通訊中標志通訊各方身份信息的一串數字,提供了一種在Internet 上驗證通信實體身份的方式,數字證書不是數字身份證,而是身份認證機構蓋在數字身份證上的一個章或印(或者說加在數字身份證上的一個簽名)。它是由權威機構——CA 機構,又稱為證書授權(Certificate Authority)中心發行的,人們可以在網上用它來識別對方的身份。
2. 應用場景
交易者身份的確定性、不可否認性、不可修改性
對應用進行簽名認證(例如Android 的apk)
3. 數字證書格式
數字證書的格式普遍采用的是X.509V3 國際標准,一個標准的X.509 數字證書包含以下一些內容:
4. 數字證書原理
數字證書是安全領域裡的終極武器,SSL 通信協議裡最核心的東西就是數字證書。他涉及到前面提到的所有知識:對稱加密、非對稱加密、消息摘要、數字簽名等。
數字證書可以通過java 自帶的KeyTool 工具生成,生成後的數字證書一般保管在KeyStore 裡。KeyStore可以叫做秘鑰倉庫。
秘鑰倉庫可以保管3 種類型的數據:KeyStore.PrivateKeyEntry(非對稱機密裡的私鑰)、KeyStore.SecretKeyEntry (對稱加密裡的秘鑰)、KeyStore.TrustedCertificateEntry(受信任的證書)
5. KeyTool工具
路徑:jre\bin\keytool.exe
常用命令:
生成keypair
keytool -genkeypair
keytool -genkeypair -alias lisi(後面部分是為證書指定別名,否則采用默認的名稱為mykey)
看看keystore 中有哪些項目:
keytool -list 或keytool -list -v
keytool -exportcert -alias lisi -file lisi.cer
生成可打印的證書:
keytool -exportcert -alias lisi -file lisi.cer –rfc
顯示數字證書文件中的證書信息:
keytool -printcert -file lisi.cer
直接雙擊lisi.cer,用window 系統的內置程序打開lisi.cer
6. Android 的keystore 相關知識
debug 簽名路徑:user.android\debug.keystore
debug.keystore 的別名(alias)及密碼:
別名:androiddebugkey,密碼:android
簽名命令(jdk1.6):
jarsigner -verbose -keystore debug.keystore -signedjar 1signed.apk 1.apk androiddebugkey
簽名命令(jdk1.7):
jarsigner -verbose -keystore debug.keystore -signedjar 1signed.apk 1.apk androiddebugkey -digestalg
SHA1 -sigalg MD5withRSA
優化命令:
zipalign -v 4 1signed.apk 1signedaligned.apk
驗證簽名是否成功:
jarsigner -verify 1signed.apk
7. 補充
簽名證書:
由權威頒發機構頒發給服務器或者個人用於證明自己身份的東西,默認客戶端都是信任的。主要目的是用來加密和保證數據的完整性和不可抵賴性
例如根證書機構Symantec 頒發給百度的就是簽名證書,是受信任的。
自簽名證書:
由服務器自己頒發給自己,用於證明自己身份的東西,非權威頒發機構發布,默認客戶端都是不信任的,主要目的是用來加密和保證數據的完整性和不可抵賴性,與簽名證書相同.
例如中鐵集團(SRCA)辦法給12306 的證書就是自簽名證書,自己給自己頒發的。
Volley 是一個 HTTP 庫,它能夠幫助 Android app 更方便地執行網絡操作,最重要的是,它更快速高效。我們可以通過開源的 AOSP 倉庫獲取到 Voll
再看文章之前,希望大家先打開自己的微信點到朋友圈中去,仔細觀察是不是發現朋友圈裡的有個“九宮格”的圖片區域,點擊圖片又會跳到圖片的詳細查看頁面,並且支持圖片的滑動和縮放?
這個動畫效果是把Activity當做一張紙,正反面都有內容,且當點擊正反面的任何一個翻轉按鈕,Activity都會以屏幕中心為翻轉中心點(Z軸的翻轉中心點可以自由設定),
魅族的魅藍手機通常都是只有移動和聯通版兩種版本的,但是最近最新發布的魅藍E再次吧魅藍手機推向了一個新的高度,很多機友就開始問小編了。魅族魅藍E支持什麼SIM