亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Android 安全加密:數(shù)字簽名和數(shù)字證書詳解

 更新時(shí)間:2016年09月13日 10:32:52   作者:GoogleDeveloper  
本文主要介紹Android 安全加密數(shù)字簽名和數(shù)字證書的資料,這里整理詳細(xì)的資料及數(shù)字簽名和數(shù)字證書應(yīng)用詳解,有需要的小伙伴可以參考下

Android安全加密專題文章索引


以上學(xué)習(xí)所有內(nèi)容,對(duì)稱加密、非對(duì)稱加密、消息摘要、數(shù)字簽名等知識(shí)都是為了理解數(shù)字證書工作原理而作為一個(gè)預(yù)備知識(shí)。數(shù)字證書是密碼學(xué)里的終極武器,是人類幾千年歷史總結(jié)的智慧的結(jié)晶,只有在明白了數(shù)字證書工作原理后,才能理解Https 協(xié)議的安全通訊機(jī)制。最終才能在SSL 開發(fā)過程中得心應(yīng)手。

另外,對(duì)稱加密和消息摘要這兩個(gè)知識(shí)點(diǎn)是可以單獨(dú)拿來使用的。

知識(shí)點(diǎn)串聯(lián):

數(shù)字證書使用到了以上學(xué)習(xí)的所有知識(shí)

  1. 對(duì)稱加密與非對(duì)稱加密結(jié)合使用實(shí)現(xiàn)了秘鑰交換,之后通信雙方使用該秘鑰進(jìn)行對(duì)稱加密通信。
  2. 消息摘要與非對(duì)稱加密實(shí)現(xiàn)了數(shù)字簽名,根證書機(jī)構(gòu)對(duì)目標(biāo)證書進(jìn)行簽名,在校驗(yàn)的時(shí)候,根證書用公鑰對(duì)其進(jìn)行校驗(yàn)。若校驗(yàn)成功,則說明該證書是受信任的。
  3. Keytool 工具可以創(chuàng)建證書,之后交給根證書機(jī)構(gòu)認(rèn)證后直接使用自簽名證書,還可以輸出證書的RFC格式信息等。
  4. 數(shù)字簽名技術(shù)實(shí)現(xiàn)了身份認(rèn)證與數(shù)據(jù)完整性保證。
  5. 加密技術(shù)保證了數(shù)據(jù)的保密性,消息摘要算法保證了數(shù)據(jù)的完整性,對(duì)稱加密的高效保證了數(shù)據(jù)處理的可靠性,數(shù)字簽名技術(shù)保證了操作的不可否認(rèn)性。

通過以上內(nèi)容的學(xué)習(xí),我們要能掌握以下知識(shí)點(diǎn):

  1. 基礎(chǔ)知識(shí):bit 位、字節(jié)、字符、字符編碼、進(jìn)制轉(zhuǎn)換、io
  2. 知道怎樣在實(shí)際開發(fā)里怎樣使用對(duì)稱加密解決問題
  3. 知道對(duì)稱加密、非對(duì)稱加密、消息摘要、數(shù)字簽名、數(shù)字證書是為了解決什么問題而出現(xiàn)的
  4. 了解SSL 通訊流程
  5. 實(shí)際開發(fā)里怎樣請(qǐng)求Https 的接口

數(shù)字簽名

1. 概述

數(shù)字簽名是非對(duì)稱加密與數(shù)字摘要的組合應(yīng)用

2. 應(yīng)用場景

校驗(yàn)用戶身份(使用私鑰簽名,公鑰校驗(yàn),只要用公鑰能校驗(yàn)通過,則該信息一定是私鑰持有者發(fā)布的)
校驗(yàn)數(shù)據(jù)的完整性(用解密后的消息摘要跟原文的消息摘要進(jìn)行對(duì)比)

3. 簽名過程

“發(fā)送報(bào)文時(shí),發(fā)送方用一個(gè)哈希函數(shù)從報(bào)文文本中生成報(bào)文摘要,然后用自己的私人密鑰對(duì)這個(gè)摘要進(jìn)行加密,這個(gè)加密后的摘要將作為報(bào)文的數(shù)字簽名和報(bào)文一起發(fā)送給接收方,接收方首先用與發(fā)送方一樣的哈希函數(shù)從接收到的原始報(bào)文中計(jì)算出報(bào)文摘要,接著再用發(fā)送方的公用密鑰來對(duì)報(bào)文附加的數(shù)字簽名進(jìn)行解密,如果這兩個(gè)摘要相同、那么接收方就能確認(rèn)該數(shù)字簽名是發(fā)送方的。

數(shù)字簽名有兩種功效:一是能確定消息確實(shí)是由發(fā)送方簽名并發(fā)出來的,因?yàn)閯e人假冒不了發(fā)送方的簽名。二是數(shù)字簽名能確定消息的完整性。因?yàn)閿?shù)字簽名的特點(diǎn)是它代表了文件的特征,文件如果發(fā)生改變,數(shù)字摘要的值也將發(fā)生變化。不同的文件將得到不同的數(shù)字摘要。一次數(shù)字簽名涉及到一個(gè)哈希函數(shù)、發(fā)送者的公鑰、發(fā)送者的私鑰。”

4. 使用步驟

//獲取signature 對(duì)象,初始化算法:MD2withRSA, MD5withRSA, or SHA1withRSA
Signature signature = Signature.getInstance("MD5withRSA");
//創(chuàng)建私鑰(從磁盤上讀取)
PrivateKey privateKey = (PrivateKey)SerializableUtil.readObject(
"heima.privateKey");
//使用私鑰進(jìn)行初始化
signature.initSign(privateKey);
//傳入需要簽名的數(shù)據(jù)
signature.update(content.getBytes());
//執(zhí)行簽名
byte[] sign = signature.sign();

//創(chuàng)建公鑰(從磁盤上讀?。?
PublicKey publicKey = (PublicKey) SerializableUtil.readObject(
"heima.publicKey");
//使用公鑰進(jìn)行初始化
signature.initVerify(publicKey);
//傳入需要校驗(yàn)的數(shù)據(jù)(即上面的原文)
signature.update(content.getBytes());
//執(zhí)行校驗(yàn)
boolean verify = signature.verify(sign);

5. 總結(jié)

數(shù)字簽名一般不單獨(dú)使用,基本都是用在數(shù)字證書里實(shí)現(xiàn)SSL 通信協(xié)議。下面將學(xué)習(xí)的數(shù)字證書就是基于數(shù)字簽名技術(shù)實(shí)現(xiàn)的。

數(shù)字證書

1. 概述

數(shù)字證書就是互聯(lián)網(wǎng)通訊中標(biāo)志通訊各方身份信息的一串?dāng)?shù)字,提供了一種在Internet 上驗(yàn)證通信實(shí)體身份的方式,數(shù)字證書不是數(shù)字身份證,而是身份認(rèn)證機(jī)構(gòu)蓋在數(shù)字身份證上的一個(gè)章或?。ɑ蛘哒f加在數(shù)字身份證上的一個(gè)簽名)。它是由權(quán)威機(jī)構(gòu)——CA 機(jī)構(gòu),又稱為證書授權(quán)(Certificate Authority)中心發(fā)行的,人們可以在網(wǎng)上用它來識(shí)別對(duì)方的身份。

2. 應(yīng)用場景

交易者身份的確定性、不可否認(rèn)性、不可修改性
對(duì)應(yīng)用進(jìn)行簽名認(rèn)證(例如Android 的apk)

3. 數(shù)字證書格式

數(shù)字證書的格式普遍采用的是X.509V3 國際標(biāo)準(zhǔn),一個(gè)標(biāo)準(zhǔn)的X.509 數(shù)字證書包含以下一些內(nèi)容:

  1. 證書的版本信息;
  2. 證書的序列號(hào),每個(gè)證書都有一個(gè)唯一的證書序列號(hào);
  3. 證書所使用的簽名算法;
  4. 證書的發(fā)行機(jī)構(gòu)名稱,命名規(guī)則一般采用X.500 格式;
  5. 證書的有效期,通用的證書一般采用UTC 時(shí)間格式,它的計(jì)時(shí)范圍為1950-2049;
  6. 證書所有人的名稱,命名規(guī)則一般采用X.500 格式;
  7. 證書所有人的公開密鑰;
  8. 證書發(fā)行者對(duì)證書的簽名。

4. 數(shù)字證書原理

數(shù)字證書是安全領(lǐng)域里的終極武器,SSL 通信協(xié)議里最核心的東西就是數(shù)字證書。他涉及到前面提到的所有知識(shí):對(duì)稱加密、非對(duì)稱加密、消息摘要、數(shù)字簽名等。

數(shù)字證書可以通過java 自帶的KeyTool 工具生成,生成后的數(shù)字證書一般保管在KeyStore 里。KeyStore可以叫做秘鑰倉庫。

秘鑰倉庫可以保管3 種類型的數(shù)據(jù):KeyStore.PrivateKeyEntry(非對(duì)稱機(jī)密里的私鑰)、KeyStore.SecretKeyEntry (對(duì)稱加密里的秘鑰)、KeyStore.TrustedCertificateEntry(受信任的證書)

5. KeyTool工具

路徑:jre\bin\keytool.exe

常用命令:
生成keypair

keytool -genkeypair
keytool -genkeypair -alias lisi
(后面部分是為證書指定別名,否則采用默認(rèn)的名稱為mykey)

看看keystore 中有哪些項(xiàng)目:

keytool -list 或keytool -list -v
keytool -exportcert -alias lisi -file lisi.cer

生成可打印的證書:

keytool -exportcert -alias lisi -file lisi.cer –rfc

顯示數(shù)字證書文件中的證書信息:

keytool -printcert -file lisi.cer

直接雙擊lisi.cer,用window 系統(tǒng)的內(nèi)置程序打開lisi.cer

6. Android 的keystore 相關(guān)知識(shí)

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

優(yōu)化命令:

zipalign -v 4 1signed.apk 1signedaligned.apk

驗(yàn)證簽名是否成功:

jarsigner -verify 1signed.apk

7. 補(bǔ)充

簽名證書:

由權(quán)威頒發(fā)機(jī)構(gòu)頒發(fā)給服務(wù)器或者個(gè)人用于證明自己身份的東西,默認(rèn)客戶端都是信任的。主要目的是用來加密和保證數(shù)據(jù)的完整性和不可抵賴性

例如根證書機(jī)構(gòu)Symantec 頒發(fā)給百度的就是簽名證書,是受信任的。

自簽名證書:

由服務(wù)器自己頒發(fā)給自己,用于證明自己身份的東西,非權(quán)威頒發(fā)機(jī)構(gòu)發(fā)布,默認(rèn)客戶端都是不信任的,主要目的是用來加密和保證數(shù)據(jù)的完整性和不可抵賴性,與簽名證書相同.

例如中鐵集團(tuán)(SRCA)辦法給12306 的證書就是自簽名證書,自己給自己頒發(fā)的。

相關(guān)文章

最新評(píng)論