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

來源:互聯網
上載者:User

Android安全加密專題文章索引

  1. Android安全加密:對稱式加密
  2. Android安全加密:非對稱式加密
  3. Android安全加密:訊息摘要Message Digest
  4. Android安全加密:數位簽章和數位憑證
  5. Android安全加密:Https編程

以上學習所有內容,對稱式加密、非對稱式加密、訊息摘要、數位簽章等知識都是為了理解數位憑證工作原理而作為一個預備知識。數位憑證是密碼學裡的終極武器,是人類幾千年歷史總結的智慧的結晶,只有在明白了數位憑證工作原理後,才能理解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 倍,所以一般不會用來加密大量資料,通常我們經常會將對稱式加密和非對稱式加密兩種技術聯合起來使用,例如用非對稱式加密來給稱加密裡的秘鑰進行加密(即秘鑰交換)。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.