明文:待加密信息java
密文:通過加密後的明文算法
加密:明文轉爲密文的過程apache
加密算法:明文轉爲密文的轉換算法安全
加密祕鑰:經過加密算法進行加密操做的祕鑰網絡
解密:將密文轉爲明文的過程ide
解密算法:密文轉爲明文的算法函數
解密祕鑰:經過解密算法進行解密操做的祕鑰加密
密碼分析:截獲密文者試圖經過分析截獲的密文從而推斷出原來的明文或祕鑰的過程spa
主動攻擊:攻擊者非法入侵密碼系統,採用僞造,修改,刪除等手段向系統注入假消息進行欺騙(對密文具備破壞做用)設計
被動攻擊:對一個保密系統採起截獲密文並對其進行分析和攻擊(對密文沒有破壞做用)
密碼體制:由明文空間,密文空間,祕鑰空間,加密算法和解密算法五部分組成
密碼協議:也稱爲安全協議,指以密碼學爲基礎的消息交換的通訊協議,目的是在網絡環境中提供安全的服務
柯克霍夫原則:數據的安全基於祕鑰而不是算法的保密,即系統的安全取決於祕鑰,對祕鑰保密,對算法公開.___現代密碼學設計的基本原則
古典密碼:以字符爲基本加密單元
現代密碼:以信息塊爲基本加密單元
名稱 | 詳細說明 | 應用領域 | 類別 |
受限制算法 | 算法的保密性基於保持算法的祕密 | 軍事領域 | 古典密碼 |
基於祕鑰算法 | 算法的保密性基於對祕鑰的保密 | 現代密碼 |
名稱 | 別名 | 詳細說明 |
對稱密碼 | 單鑰密碼或私鑰密碼 | 指加密祕鑰與解密祕鑰相同 |
非對稱密碼 | 雙鑰密碼或公鑰密碼 | 加密祕鑰與解密祕鑰不一樣,祕鑰份公鑰,私鑰 |
對稱密碼算法 | 單鑰密碼算法或私鑰密碼算法 | 指應用於對稱密碼的加密,解密算法 |
非對稱密碼算法 | 雙鑰密碼算法或公鑰密碼算法 | 指對應於非對稱密碼的加密,解密算法 |
分組密碼:指加密時將明文分紅固定長度的組,用同一祕鑰和算法對每一塊加密,輸出也是固定從長度的密文,多用於網絡加密
流密碼:也稱序列密碼.指加密時每次加密一位或者一個字節明文
散列函數用來驗證數據的完整性
特色:
長度不受限制
哈希值容易計算
散列運算過程不可逆
消息摘要算法MD5等
SHA--安全散列算法
MAC--消息認證碼算法
主要是針對以數字的形式存儲的消息進行的處理
開放式通訊系統(Open System Interconnection)
七層網絡通訊協議對應的安全機制有加密機制,數字簽名機制,訪問控制機制,數據完整性機制,認證機制,業務流填充機制,路由控制機制,公證機制.對應每一層會擁有不一樣的處理方式
認證(鑑別):在整個網絡的交互過程當中,對於接收方和發送方的身份和數據來源的認證
訪問控制服務:防止沒有受權的用戶非法訪問資源
數據保密性服務:爲了確保數據的安全有效,防止數據在傳輸過程當中泄露和篡改
數據完整性服務:保證數據在傳輸過程當中原樣傳輸
抗否定性服務:防止發送和接收雙方在執行各自操做的時候否定操做
-JDK
-Commons Codec
-Bouncy Castle
代碼實現:三種實現方式
package com.dzj.test; import java.util.Base64.Encoder; import sun.misc.BASE64Decoder; import java.io.IOException; import java.util.Base64; /** * 三種方式實現Base64加密 * * @author Administrator * */ public class Base64Demo { private static String src = "hello world"; public static void main(String[] args) { // jdkBase64(); // commonsCodesBase64(); bouncyCastleBase64(); } public static void jdkBase64() { Encoder encoder = Base64.getEncoder(); byte[] encode = encoder.encode(src.getBytes()); String encodeStr = new String(encode); System.out.println(encodeStr); BASE64Decoder decoder = new BASE64Decoder(); byte[] decodeBuffer = null; try { decodeBuffer = decoder.decodeBuffer(encodeStr); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } String decodeStr = new String(decodeBuffer); System.out.println(decodeStr); } public static void commonsCodesBase64() { byte[] encodeBytes = org.apache.commons.codec.binary.Base64.encodeBase64(src.getBytes()); System.out.println("encode:" + new String(encodeBytes)); byte[] decodeBytes = org.apache.commons.codec.binary.Base64.decodeBase64(encodeBytes); System.out.println(new String(decodeBytes)); } public static void bouncyCastleBase64() { byte[] encode = org.bouncycastle.util.encoders.Base64.encode(src.getBytes()); System.out.println(new String(encode)); byte[] decode = org.bouncycastle.util.encoders.Base64.decode(encode); System.out.println(new String(decode)); } }