最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2016年09月13日 10:01:38   作者:Android-Developer  
本文主要介紹Android 安全加密,非對稱加密的知識,這里整理了詳細的資料,及使用方法,有需要的小伙伴可以參考下

Android安全加密專題文章索引

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

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

知識點串聯(lián):

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

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

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

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

1. 介紹

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

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

2. 常見算法

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

3. RSA 算法原理

質(zhì)因數(shù)、歐拉函數(shù)、模反元素
原理很復(fù)雜,只需要知道內(nèi)部是基于分解質(zhì)因數(shù)和取模操作即可

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,執(zhí)行加密操作
byte[] result = cipher.doFinal(content.getBytes());
//使用私鑰初始化密碼器
cipher.init(Cipher.DECRYPT_MODE, privateKey);
//執(zhí)行解密操作
byte[] deResult = cipher.doFinal(result);

5. 注意點

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

6. 分批操作

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

7. 非對稱加密用途

身份認證

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

陌生人通信

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

秘鑰交換

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

8. 總結(jié)

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

相關(guān)文章

  • Android Dialog詳解及實例代碼

    Android Dialog詳解及實例代碼

    這篇文章主要介紹了 Android Dialog詳解及實例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • Android實現(xiàn)水平帶刻度的進度條

    Android實現(xiàn)水平帶刻度的進度條

    這篇文章主要為大家詳細介紹了Android實現(xiàn)水平帶刻度的進度條,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • Android 8.0版本更新無法自動安裝問題的解決方法

    Android 8.0版本更新無法自動安裝問題的解決方法

    這篇文章主要為大家詳細介紹了Android 8.0版本更新無法自動安裝問題的解決方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-06-06
  • OpenGL ES紋理詳解

    OpenGL ES紋理詳解

    這篇文章主要為大家詳細介紹了OpenGL ES紋理的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • Android framework ATMS啟動流程

    Android framework ATMS啟動流程

    這篇文章主要為大家介紹了Android framework ATMS啟動流程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-03-03
  • flutter 自定義websocket路由的實現(xiàn)

    flutter 自定義websocket路由的實現(xiàn)

    這篇文章主要介紹了flutter 自定義websocket路由的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • Android中使用Canvas繪制南丁格爾玫瑰圖(Nightingale rose diagram)

    Android中使用Canvas繪制南丁格爾玫瑰圖(Nightingale rose diagram)

    這篇文章主要介紹了Android中使用Canvas繪制南丁格爾玫瑰圖(Nightingale rose diagram),本文直接給出實現(xiàn)代碼和運行效果圖,需要的朋友可以參考下
    2015-03-03
  • Android SpannableString設(shè)置超鏈接、顏色、字體等屬性

    Android SpannableString設(shè)置超鏈接、顏色、字體等屬性

    這篇文章主要介紹了Android SpannableString設(shè)置超鏈接、顏色、字體等屬性的相關(guān)資料,需要的朋友可以參考下
    2017-01-01
  • Android基礎(chǔ)知識之frame動畫效果

    Android基礎(chǔ)知識之frame動畫效果

    Android基礎(chǔ)知識之tween動畫效果,Android一共提供了兩種動畫,這篇文章主要介紹了Android動畫效果之frame動畫,感興趣的小伙伴們可以參考一下
    2016-06-06
  • Android banner詳解用法案例

    Android banner詳解用法案例

    android-banner實現(xiàn)了一般banner循環(huán)輪播的效果,一頁只顯示一張圖片,也可以一頁顯示一張圖和相鄰兩個圖片的一部分,此項目僅僅是banner展示圖片,沒有多余的諸如指示器、頁面切換動畫等效果代碼,詳見效果圖和案例代碼
    2021-11-11

最新評論

桦甸市| 云林县| 宁河县| 金乡县| 奇台县| 宁南县| 德庆县| 渑池县| 廉江市| 龙海市| 扬中市| 朝阳县| 白朗县| 定陶县| 晋州市| 云阳县| 上虞市| 新闻| 叙永县| 泗阳县| 黄龙县| 屏山县| 四会市| 唐海县| 夏邑县| 芮城县| 绥江县| 房山区| 沈丘县| 筠连县| 且末县| 阜宁县| 曲水县| 临桂县| 苍溪县| 图木舒克市| 章丘市| 馆陶县| 辰溪县| 崇阳县| 荃湾区|