編輯:關於Android編程
Android安全加密專題文章索引
以上學習所有內容,對稱加密、非對稱加密、消息摘要、數字簽名等知識都是為了理解數字證書工作原理而作為一個預備知識。數字證書是密碼學裡的終極武器,是人類幾千年歷史總結的智慧的結晶,只有在明白了數字證書工作原理後,才能理解Https 協議的安全通訊機制。最終才能在SSL 開發過程中得心應手。
另外,對稱加密和消息摘要這兩個知識點是可以單獨拿來使用的。
知識點串聯:
數字證書使用到了以上學習的所有知識
通過以上內容的學習,我們要能掌握以下知識點:
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 倍,所以一般不會用來加密大量數據,通常我們經常會將對稱加密和非對稱加密兩種技術聯合起來使用,例如用非對稱加密來給稱加密裡的秘鑰進行加密(即秘鑰交換)。
Android中有個我們熟悉又陌生的對象Context(上下文),當我們啟動Activity的時候需要上下文,當我們使用dialog的時候我們需要上下文,但是上下文對象到
QQ音樂中圓形旋轉碟子思路分析:1、在onMeasure中測量整個View的寬和高後,設置寬高2、獲取我們res的圖片資源後,在ondraw方法中進行繪制圓形圖片3、通過
Call openFileOutput() with the name of the file and the operating mode. This return
效果 (關於gif怎麼生成的,我先錄手機的屏幕得到mp4文件,然後用這個網址:https://cloudconvert.com/mp4-to-gif 進行的mp4轉