国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android 安全加密:非對稱加密詳解

2019-12-12 05:17:13
字體:
來源:轉載
供稿:網友

Android安全加密專題文章索引

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

另外,對稱加密和消息摘要這兩個知識點是可以單獨拿來使用的。

知識點串聯:

數字證書使用到了以上學習的所有知識

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

通過以上內容的學習,我們要能掌握以下知識點:

  1. 基礎知識:bit 位、字節、字符、字符編碼、進制轉換、io
  2. 知道怎樣在實際開發里怎樣使用對稱加密解決問題
  3. 知道對稱加密、非對稱加密、消息摘要、數字簽名、數字證書是為了解決什么問題而出現的
  4. 了解SSL 通訊流程
  5. 實際開發里怎樣請求Https 的接口

1. 介紹

與對稱加密算法不同,非對稱加密算法需要兩個密鑰:公鑰(publickey)和私鑰(privatekey)。公鑰與私鑰是一對,如果用公鑰對數據進行加密,只有用對應的私鑰才能解密;如果用私鑰對數據進行加密,那么只有用對應的公鑰才能解密。因為加密和解密使用的是兩個不同的密鑰,所以這種算法叫作非對稱加密算法。

簡單理解為:加密和解密是不同的鑰匙

2. 常見算法

RSA、Elgamal、背包算法、Rabin、D-H、ECC(橢圓曲線加密算法)等,其中支付寶使用的就是RSA算法

3. RSA 算法原理

質因數、歐拉函數、模反元素
原理很復雜,只需要知道內部是基于分解質因數和取模操作即可

4. 使用步驟

//1,獲取cipher 對象Cipher cipher = Cipher.getInstance("RSA");//2,通過秘鑰對生成器KeyPairGenerator 生成公鑰和私鑰KeyPair keyPair = KeyPairGenerator.getInstance("RSA").generateKeyPair();//使用公鑰進行加密,私鑰進行解密(也可以反過來使用)PublicKey publicKey = keyPair.getPublic();PrivateKey privateKey = keyPair.getPrivate();//3,使用公鑰初始化密碼器cipher.init(Cipher.ENCRYPT_MODE, publicKey);//4,執行加密操作byte[] result = cipher.doFinal(content.getBytes());//使用私鑰初始化密碼器cipher.init(Cipher.DECRYPT_MODE, privateKey);//執行解密操作byte[] deResult = cipher.doFinal(result);

5. 注意點

//一次性加密數據的長度不能大于117 字節private static final int ENCRYPT_BLOCK_MAX = 117;//一次性解密的數據長度不能大于128 字節private static final int DECRYPT_BLOCK_MAX = 128;

6. 分批操作

/*** 分批操作** @param content 需要處理的數據* @param cipher 密碼器(根據cipher 的不同,操作可能是加密或解密)* @param blockSize 每次操作的塊大小,單位為字節* @return 返回處理完成后的結果* @throws Exception*/ public static byte[] doFinalWithBatch(byte[] content, Cipher cipher, int blockSize) throwseption { int offset = 0;//操作的起始偏移位置 int len = content.length;//數據總長度 byte[] tmp;//臨時保存操作結果 ByteArrayOutputStream baos = new ByteArrayOutputStream(); //如果剩下數據 while (len - offset > 0) { if (len - offset >= blockSize) { //剩下數據還大于等于一個blockSize tmp = cipher.doFinal(content, offset, blockSize); }else {  //剩下數據不足一個blockSize  tmp = cipher.doFinal(content, offset, len - offset);  } //將臨時結果保存到內存緩沖區里 baos.write(tmp); offset = offset + blockSize; } baos.close(); return baos.toByteArray(); }

7. 非對稱加密用途

身份認證

一條加密信息若能用A 的公鑰能解開,則該信息一定是用A 的私鑰加密的,該能確定該用戶是A。

陌生人通信

A 和B 兩個人互不認識,A 把自己的公鑰發給B,B 也把自己的公鑰發給A,則雙方可以通過對方的公鑰加密信息通信。C 雖然也能得到A、B 的公鑰,但是他解不開密文。

秘鑰交換

A 先得到B 的公鑰,然后A 生成一個隨機秘鑰,例如13245768,之后A 用B 的公鑰加密該秘鑰,得到加密后的秘鑰,例如dxs#fd@dk,之后將該密文發給B,B 用自己的私鑰解密得到123456,之后雙方使用13245768 作為對稱加密的秘鑰通信。C 就算截獲加密后的秘鑰dxs#fd@dk,自己也解不開,這樣A、B 二人能通過對稱加密進行通信。

8. 總結

非對稱加密一般不會單獨拿來使用,他并不是為了取代對稱加密而出現的,非對稱加密速度比對稱加密慢很多,極端情況下會慢1000 倍,所以一般不會用來加密大量數據,通常我們經常會將對稱加密和非對稱加密兩種技術聯合起來使用,例如用非對稱加密來給稱加密里的秘鑰進行加密(即秘鑰交換)。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 龙陵县| 萨嘎县| 平武县| 甘洛县| 广德县| 中山市| 故城县| 皮山县| 时尚| 蒙山县| 高淳县| 咸丰县| 神木县| 土默特右旗| 万载县| 建昌县| 正定县| 佳木斯市| 平山县| 两当县| 盐池县| 安塞县| 三亚市| 阜阳市| 娄烦县| 福建省| 宁远县| 清水县| 沙坪坝区| 开封县| 东乌珠穆沁旗| 长宁县| 治多县| 虹口区| 诏安县| 通河县| 社会| 满洲里市| 鹤庆县| 买车| 丰宁|