Ⅰ 當待加密明文長度為任意長時,如何使用DES演算法來進行加密呢
不知道你用什麼語言,下面是C#的寫法。在C#里使用對稱加密不考慮明文大小,因為明文被處理成流.
public class TestClass
{
static void Main(string[] args)
{
byte[] key = new byte[] { 0, 1, 2, 3, 4, 5, 6, 7 };
byte[] iv = new byte[] { 0, 1, 2, 3, 4, 5, 6, 7 };
byte[] bytes = Encoding.UTF8.GetBytes("任意長度字元串");
byte[] enBytes = Encrypt(bytes, key, iv);
}
static byte[] Encrypt(byte[] bytes, byte[] key, byte[] iv)
{
MemoryStream ms = new MemoryStream();
DESCryptoServiceProvider desCsp = new DESCryptoServiceProvider();
desCsp.BlockSize = iv.Length * 8;
CryptoStream cs = new CryptoStream(ms, desCsp.CreateEncryptor(key, iv), CryptoStreamMode.Write);
cs.Write(bytes, 0, bytes.Length);
cs.FlushFinalBlock();
cs.Close();
desCsp.Clear();
return ms.ToArray();
}
}
Ⅱ 對稱密碼體制根據對明文加密方式的不同分為分組密碼和序列密碼
最熱門的話題是INTERNET與非同步傳輸模式ATM技術。信息技術與網路的應用已經成為衡量21世界國力與企業競爭力的重要標准。國家信息基礎設施建設計劃,NII被稱為信息高速公路。Internet,Intranet與Extranet和電子商務已經成為企業網研究與應用的熱點。計算機網路建立的主要目標是實現計算機資源的共享。計算機資源主要是計算機硬體,軟體與數據。我們判斷計算機是或互連成計算機網路,主要是看它們是不是獨立的「自治計算機」。分布式操作系統是以全局方式管理系統資源,它能自動為用戶任務調度網路資源。分布式系統與計算機網路的主要是區別不在他們的物理結構,而是在高層軟體上。按傳輸技術分為:1。廣播式網路。2。點--點式網路。採用分組存儲轉發與路由選擇是點-點式網路與廣播網路的重要區別之一。按規模分類:區域網,城域網與廣域網。廣域網(遠程網)以下特點:1適應大容量與突發性通信的要求。2適應綜合業務服務的要求。3開放的設備介面與規范化的協議。4完善的通信服務與網路管理。X.25網是一種典型的公用分組交換網,也是早期廣域網中廣泛使用的一種通信子網。變化主要是以下3個方面:1傳輸介質由原來的電纜走向光纖。2多個區域網之間告訴互連的要求越來越強烈。3用戶設備大大提高。在數據傳輸率高,誤碼率低的光纖上,使用簡單的協議,以減少網路的延遲,而必要的差錯控制功能將由用戶設備來完成。這就是幀中續FR,FrameRelay技術產生的背景。決定區域網特性的主要技術要素為網路拓撲,傳輸介質與介質訪問控制方法。從區域網介質控制方法的角度,區域網分為共享式區域網與交換式區域網。城域網MAN介於廣域網與區域網之間的一種高速網路。FDDI是一種以光纖作為傳輸介質的高速主幹網,它可以用來互連區域網與計算機。各種城域網建設方案有幾個相同點:傳輸介質採用光纖,交換接點採用基於IP交換的高速路由交換機或ATM交換機,在體系結構上採用核心交換層,業務匯聚層與接入層三層模式。計算機網路的拓撲主要是通信子網的拓撲構型。網路拓撲可以根據通信子網中通信信道類型分為:4點-點線路通信子網的拓撲。星型,環型,樹型,網狀型。5廣播式通信子網的拓撲。匯流排型,樹型,環型,無線通信與衛星通信型。傳輸介質是網路中連接收發雙方的物理通路,也是通信中實際傳送信息的載體。常用的傳輸介質為:雙絞線,同軸電纜,光纖電纜和無線通信與衛星通信信道。雙絞線由按規則螺旋結構排列的兩根,四根或八根絕緣導線組成。屏蔽雙絞線STP和非屏蔽雙絞線UTP。屏蔽雙絞線由外部保護層,屏蔽層與多對雙絞線組成。非屏蔽雙絞線由外部保護層,多對雙絞線組成。三類線,四類線,五類線。雙絞線用做遠程中續線,最大距離可達15公里;用於100Mbps區域網時,與集線器最大距離為100米。同軸電纜由內導體,外屏蔽層,絕緣層,外部保護層。分為:基帶同軸電纜和寬頻同軸電纜。單信道寬頻:寬頻同軸電纜也可以只用於一條通信信道的高速數字通信。光纖電纜簡稱為光纜。由光纖芯,光層與外部保護層組成。在光纖發射端,主要是採用兩種光源:發光二極體LED與注入型激光二極體ILD。光纖傳輸分為單模和多模。區別在與光釺軸成的角度是或分單與多光線傳播。單模光纖優與多模光纖。電磁波的傳播有兩種方式:1。是在空間自由傳播,既通過無線方式。2。在有限的空間,既有線方式傳播。移動通信:移動與固定,移動與移動物體之間的通信。移動通信手段:1無線通信系統。2微波通信系統。頻率在100MHz-10GHz的信號叫做微波信號,它們對應的信號波長為3m-3cm。3蜂窩移動通信系統。多址接入方法主要是有:頻分多址接入FDMA,時分多址接入TDMA與碼分多址接入CDMA。4衛星移動通信系統。商用通信衛星一般是被發射在赤道上方35900km的同步軌道上描述數據通信的基本技術參數有兩個:數據傳輸率與誤碼率。數據傳輸率是描述數據傳輸系統的重要指標之一。S=1/T。對於二進制信號的最大數據傳輸率Rmax與通信信道帶寬B(B=f,單位是Hz)的關系可以寫為:Rmax=2*f(bps)在有隨機熱雜訊的信道上傳輸數據信號時,數據傳輸率Rmax與信道帶寬B,信噪比S/N關系為:Rmax=B*LOG⒉(1+S/N)誤碼率是二進制碼元在數據傳輸系統中被傳錯的概率,它在數值上近似等於:Pe=Ne/N(傳錯的除以總的)對於實際數據傳輸系統,如果傳輸的不是二進制碼元,要摺合為二進制碼元來計算。這些為網路數據傳遞交換而指定的規則,約定與標准被稱為網路協議。協議分為三部分:語法。語義。時序。將計算機網路層次模型和各層協議的集合定義為計算機網路體系結構。計算機網路中採用層次結構,可以有以下好處:1各層之間相互獨立。2靈活性好。3各層都可以採用最合適的技術來實現,各層實現技術的改變不影響其他各層。4易於實現和維護。5有利於促進標准化。該體系結構標準定義了網路互連的七層框架,既ISO開放系統互連參考模型。在這一框架中進一步詳細規定了每一層的功能,以實現開放系統環境中的互連性,互操作性與應用的可移植性。OSI標准制定過程中採用的方法是將整個龐大而復雜的問題劃分為若干個容易處理的小問題,這就是分層的體系結構法。在OSI中,採用了三級抽象,既體系結構,服務定義,協議規格說明。OSI七層:2物理層:主要是利用物理傳輸介質為數據鏈路層提供物理連接,以便透明的傳遞比特流。3數據鏈路層。在通信實體之間建立數據鏈路連接,傳送以幀為單位的數據,採用差錯控制,流量控制方法。4網路層:通過路由演算法,為分組通過通信子網選擇最適當的路徑。5傳輸層:是向用戶提供可靠的端到端服務,透明的傳送報文。6會話層:組織兩個會話進程之間的通信,並管理數據的交換。7表示層:處理在兩個通信系統中交換信息的表示方式。8應用層:應用層是OSI參考模型中的最高層。確定進程之間通信的性質,以滿足用戶的需要。TCP/IP參考模型可以分為:應用層,傳輸層,互連層,主機-網路層。互連層主要是負責將源主機的報文分組發送到目的主機,源主機與目的主機可以在一個網上,也可以不在一個網上。傳輸層主要功能是負責應用進程之間的端到端的通信。TCP/IP參考模型的傳輸層定義了兩種協議,既傳輸控制協議TCP和用戶數據報協議UDP。TCP協議是面向連接的可靠的協議。UDP協議是無連接的不可靠協議。主機-網路層負責通過網路發送和接受IP數據報。按照層次結構思想,對計算機網路模塊化的研究結果是形成了一組從上到下單向依賴關系的協議棧,也叫協議族。應用層協議分為:1。一類依賴於面向連接的TCP。2.一類是依賴於面向連接的UDP協議。10另一類既依賴於TCP協議,也可以依賴於UDP協議。NSFNET採用的是一種層次結構,可以分為主幹網,地區網與校園網。作為信息高速公路主要技術基礎的數據通信網具有以下特點:1適應大容量與突發性通信的要求。2適應綜合業務服務的要求。3開放的設備介面與規范化的協議。4完善的通信服務與網路管理。人們將採用X。25建議所規定的DTE與DCE介面標準的公用分組交換網叫做X。25網。幀中繼是一種減少接點處理時間的技術。綜合業務數字網ISDN:B-ISDN與N-ISDN的區別主要在:2N是以目前正在使用的公用電話交換網為基礎,而B是以光纖作為干線和用戶環路傳輸介質。3N採用同步時分多路復用技術,B採用非同步傳輸模式ATM技術。4N各通路速率是預定的,B使用通路概念,速率不預定。非同步傳輸模式ATM是新一代的數據傳輸與分組交換技術,是當前網路技術研究與應用的熱點問題。ATM技術的主要特點是:3ATM是一種面向連接的技術,採用小的,固定長度的數據傳輸單元。4各類信息均採用信元為單位進行傳送,ATM能夠支持多媒體通信。5ATM以統計時分多路復用方式動態的分配網路,網路傳輸延遲小,適應實時通信的要求。6ATM沒有鏈路對鏈路的糾錯與流量控制,協議簡單,數據交換率高。7ATM的數據傳輸率在155Mbps-2。4Gbps。促進ATM發展的要素:2人們對網路帶寬要求的不斷增長。3用戶對寬頻智能使用靈活性的要求。4用戶對實時應用的需求。5網路的設計與組建進一步走向標准化的需求。一個國家的信息高速路分為:國家寬頻主幹網,地區寬頻主幹網與連接最終用戶的接入網。解決接入問題的技術叫做接入技術。可以作為用戶接入網三類:郵電通信網,計算機網路(最有前途),廣播電視網。網路管理包括五個功能:配置管理,故障管理,性能管理,計費管理和安全管理。代理位於被管理的設備內部,它把來自管理者的命令或信息請求轉換為本設備特有的指令,完成管理者的指示,或返回它所在設備的信息。管理者和代理之間的信息交換可以分為兩種:從管理者到代理的管理操作;從代理到管理者的事件通知。配置管理的目標是掌握和控制網路和系統的配置信息以及網路各設備的狀態和連接管理。現代網路設備由硬體和設備驅動組成。配置管理最主要的作用是可以增強網路管理者對網路配置的控制,它是通過對設備的配置數據提供快速的訪問來實現的。故障就是出現大量或嚴重錯誤需要修復的異常情況。故障管理是對計算機網路中的問題或故障進行定位的過程。故障管理最主要的作用是通過提供網路管理者快速的檢查問題並啟動恢復過程的工具,使網路的可靠性得到增強。故障標簽就是一個監視網路問題的前端進程。性能管理的目標是衡量和呈現網路特性的各個方面,使網路的性能維持在一個可以接受的水平上。性能管理包括監視和調整兩大功能。記費管理的目標是跟蹤個人和團體用戶對網路資源的使用情況,對其收取合理的費用。記費管理的主要作用是網路管理者能測量和報告基於個人或團體用戶的記費信息,分配資源並計算用戶通過網路傳輸數據的費用,然後給用戶開出帳單。安全管理的目標是按照一定的方法控制對網路的訪問,以保證網路不被侵害,並保證重要的信息不被未授權用戶訪問。安全管理是對網路資源以及重要信息訪問進行約束和控制。在網路管理模型中,網路管理者和代理之間需要交換大量的管理信息,這一過程必須遵循統一的通信規范,我們把這個通信規范稱為網路管理協議。網路管理協議是高層網路應用協議,它建立在具體物理網路及其基礎通信協議基礎上,為網路管理平台服務。目前使用的標准網路管理協議包括:簡單網路管理協議SNMP,公共管理信息服務/協議CMIS/CMIP,和區域網個人管理協議LMMP等。SNMP採用輪循監控方式。代理/管理站模式。管理節點一般是面向工程應用的工作站級計算機,擁有很強的處理能力。代理節點可以是網路上任何類型的節點。SNMP是一個應用層協議,在TCP/IP網路中,它應用傳輸層和網路層的服務向其對等層傳輸信息。CMIP的優點是安全性高,功能強大,不僅可用於傳輸管理數據,還可以執行一定的任務。信息安全包括5個基本要素:機密性,完整性,可用性,可控性與可審查性。3D1級。D1級計算機系統標准規定對用戶沒有驗證。例如DOS。WINDOS3。X及WINDOW95(不在工作組方式中)。Apple的System7。X。4C1級提供自主式安全保護,它通過將用戶和數據分離,滿足自主需求。C1級又稱為選擇安全保護系統,它描述了一種典型的用在Unix系統上的安全級別。C1級要求硬體有一定的安全級別,用戶在使用前必須登陸到系統。C1級的防護的不足之處在與用戶直接訪問操作系統的根。9C2級提供比C1級系統更細微的自主式訪問控制。為處理敏感信息所需要的最底安全級別。C2級別還包含有受控訪問環境,該環境具有進一步限制用戶執行一些命令或訪問某些文件的許可權,而且還加入了身份驗證級別。例如UNIX系統。XENIX。Novell3。0或更高版本。WINDOWSNT。10B1級稱為標記安全防護,B1級支持多級安全。標記是指網上的一個對象在安全保護計劃中是可識別且受保護的。B1級是第一種需要大量訪問控制支持的級別。安全級別存在保密,絕密級別。11B2又稱為結構化保護,他要求計算機系統中的所有對象都要加上標簽,而且給設備分配安全級別。B2級系統的關鍵安全硬體/軟體部件必須建立在一個形式的安全方法模式上。12B3級又叫安全域,要求用戶工作站或終端通過可信任途徑連接到網路系統。而且這一級採用硬體來保護安全系統的存儲區。B3級系統的關鍵安全部件必須理解所有客體到主體的訪問,必須是防竄擾的,而且必須足夠小以便分析與測試。30A1最高安全級別,表明系統提供了最全面的安全,又叫做驗證設計。所有來自構成系統的部件來源必須有安全保證,以此保證系統的完善和安全,安全措施還必須擔保在銷售過程中,系統部件不受傷害。網路安全從本質上講就是網路上的信息安全。凡是涉及到網路信息的保密性,完整性,可用性,真實性和可控性的相關技術和理論都是網路安全的研究領域。安全策約是在一個特定的環境里,為保證提供一定級別的安全保護所必須遵守的規則。安全策約模型包括了建立安全環境的三個重要組成部分:威嚴的法律,先進的技術和嚴格的管理。網路安全是網路系統的硬體,軟體以及系統中的數據受到保護,不會由於偶然或惡意的原因而遭到破壞,更改,泄露,系統能連續,可靠和正常的運行,網路服務不中斷。保證安全性的所有機制包括以下兩部分:1對被傳送的信息進行與安全相關的轉換。2兩個主體共享不希望對手得知的保密信息。安全威脅是某個人,物,事或概念對某個資源的機密性,完整性,可用性或合法性所造成的危害。某種攻擊就是某種威脅的具體實現。安全威脅分為故意的和偶然的兩類。故意威脅又可以分為被動和主動兩類。中斷是系統資源遭到破壞或變的不能使用。這是對可用性的攻擊。截取是未授權的實體得到了資源的訪問權。這是對保密性的攻擊。修改是未授權的實體不僅得到了訪問權,而且還篡改了資源。這是對完整性的攻擊。捏造是未授權的實體向系統中插入偽造的對象。這是對真實性的攻擊。被動攻擊的特點是偷聽或監視傳送。其目的是獲得正在傳送的信息。被動攻擊有:泄露信息內容和通信量分析等。主動攻擊涉及修改數據流或創建錯誤的數據流,它包括假冒,重放,修改信息和拒絕服務等。假冒是一個實體假裝成另一個實體。假冒攻擊通常包括一種其他形式的主動攻擊。重放涉及被動捕獲數據單元以及後來的重新發送,以產生未經授權的效果。修改消息意味著改變了真實消息的部分內容,或將消息延遲或重新排序,導致未授權的操作。拒絕服務的禁止對通信工具的正常使用或管理。這種攻擊擁有特定的目標。另一種拒絕服務的形式是整個網路的中斷,這可以通過使網路失效而實現,或通過消息過載使網路性能降低。防止主動攻擊的做法是對攻擊進行檢測,並從它引起的中斷或延遲中恢復過來。從網路高層協議角度看,攻擊方法可以概括為:服務攻擊與非服務攻擊。服務攻擊是針對某種特定網路服務的攻擊。非服務攻擊不針對某項具體應用服務,而是基於網路層等低層協議進行的。非服務攻擊利用協議或操作系統實現協議時的漏洞來達到攻擊的目的,是一種更有效的攻擊手段。網路安全的基本目標是實現信息的機密性,完整性,可用性和合法性。主要的可實現威脅:3滲入威脅:假冒,旁路控制,授權侵犯。4植入威脅:特洛伊木馬,陷門。病毒是能夠通過修改其他程序而感染它們的一種程序,修改後的程序裡麵包含了病毒程序的一個副本,這樣它們就能繼續感染其他程序。網路反病毒技術包括預防病毒,檢測病毒和消毒三種技術。1預防病毒技術。它通過自身長駐系統內存,優先獲得系統的控制權,監視和判斷系統中是或有病毒存在,進而阻止計算機病毒進入計算機系統對系統進行破壞。這類技術有:加密可執行程序,引導區保護,系統監控與讀寫控制。2.檢測病毒技術。通過對計算機病毒的特徵來進行判斷的技術。如自身效驗,關鍵字,文件長度的變化等。3.消毒技術。通過對計算機病毒的分析,開發出具有刪除病毒程序並恢復原元件的軟體。網路反病毒技術的具體實現方法包括對網路伺服器中的文件進行頻繁地掃描和檢測,在工作站上用防病毒晶元和對網路目錄以及文件設置訪問許可權等。網路信息系統安全管理三個原則:1多人負責原則。2任期有限原則。3職責分離原則。保密學是研究密碼系統或通信安全的科學,它包含兩個分支:密碼學和密碼分析學。需要隱藏的消息叫做明文。明文被變換成另一種隱藏形式被稱為密文。這種變換叫做加密。加密的逆過程叫組解密。對明文進行加密所採用的一組規則稱為加密演算法。對密文解密時採用的一組規則稱為解密演算法。加密演算法和解密演算法通常是在一組密鑰控制下進行的,加密演算法所採用的密鑰成為加密密鑰,解密演算法所使用的密鑰叫做解密密鑰。密碼系統通常從3個獨立的方面進行分類:1按將明文轉化為密文的操作類型分為:置換密碼和易位密碼。所有加密演算法都是建立在兩個通用原則之上:置換和易位。2按明文的處理方法可分為:分組密碼(塊密碼)和序列密碼(流密碼)。3按密鑰的使用個數分為:對稱密碼體制和非對稱密碼體制。如果發送方使用的加密密鑰和接受方使用的解密密鑰相同,或從其中一個密鑰易於的出另一個密鑰,這樣的系統叫做對稱的,但密鑰或常規加密系統。如果發送放使用的加密密鑰和接受方使用的解密密鑰不相同,從其中一個密鑰難以推出另一個密鑰,這樣的系統就叫做不對稱的,雙密鑰或公鑰加密系統。分組密碼的加密方式是首先將明文序列以固定長度進行分組,每一組明文用相同的密鑰和加密函數進行運算。分組密碼設計的核心上構造既具有可逆性又有很強的線性的演算法。序列密碼的加密過程是將報文,話音,圖象,數據等原始信息轉化成明文數據序列,然後將它同密鑰序列進行異或運算。生成密文序列發送給接受者。數據加密技術可以分為3類:對稱型加密,不對稱型加密和不可逆加密。對稱加密使用單個密鑰對數據進行加密或解密。不對稱加密演算法也稱為公開加密演算法,其特點是有兩個密鑰,只有兩者搭配使用才能完成加密和解密的全過程。不對稱加密的另一用法稱為「數字簽名」,既數據源使用其私有密鑰對數據的效驗和或其他與數據內容有關的變數進行加密,而數據接受方則用相應的公用密鑰解讀「數字簽名」,並將解讀結果用於對數據完整性的檢驗。不可逆加密演算法的特徵是加密過程不需要密鑰,並且經過加密的數據無法被解密,只有同樣輸入的輸入數據經過同樣的不可逆演算法才能得到同樣的加密數據。加密技術應用於網路安全通常有兩種形式,既面向網路和面向應用程序服務。面向網路服務的加密技術通常工作在網路層或傳輸層,使用經過加密的數據包傳送,認證網路路由及其其他網路協議所需的信息,從而保證網路的連通性和可用性不受侵害。面向網路應用程序服務的加密技術使用則是目前較為流行的加密技術的使用方法。從通信網路的傳輸方面,數據加密技術可以分為3類:鏈路加密方式,節點到節點方式和端到端方式。鏈路加密方式是一般網路通信安全主要採用的方式。節點到節點加密方式是為了解決在節點中數據是明文的缺點,在中間節點里裝有加,解密的保護裝置,由這個裝置來完成一個密鑰向另一個密鑰的變換。在端到端機密方式中,由發送方加密的數據在沒有到達最終目的節點之前是不被解密的。試圖發現明文或密鑰的過程叫做密碼分析。演算法實際進行的置換和轉換由保密密鑰決定。密文由保密密鑰和明文決定。對稱加密有兩個安全要求:1需要強大的加密演算法。2發送方和接受方必須用安全的方式來獲得保密密鑰的副本。常規機密的安全性取決於密鑰的保密性,而不是演算法的保密性。IDEA演算法被認為是當今最好最安全的分組密碼演算法。公開密鑰加密又叫做非對稱加密。公鑰密碼體制有兩個基本的模型,一種是加密模型,一種是認證模型。通常公鑰加密時候使用一個密鑰,在解密時使用不同但相關的密鑰。常規加密使用的密鑰叫做保密密鑰。公鑰加密使用的密鑰對叫做公鑰或私鑰。RSA體制被認為是現在理論上最為成熟完善的一種公鑰密碼體制。密鑰的生存周期是指授權使用該密鑰的周期。在實際中,存儲密鑰最安全的方法就是將其放在物理上安全的地方。密鑰登記包括將產生的密鑰與特定的應用綁定在一起。密鑰管理的重要內容就是解決密鑰的分發問題。密鑰銷毀包括清除一個密鑰的所有蹤跡。密鑰分發技術是將密鑰發送到數據交換的兩方,而其他人無法看到的地方。數字證書是一條數字簽名的消息,它通常用與證明某個實體的公鑰的有效性。數字證書是一個數字結構,具有一種公共的格式,它將某一個成員的識別符和一個公鑰值綁定在一起。人們採用數字證書來分發公鑰。序列號:由證書頒發者分配的本證書的唯一標示符。認證是防止主動攻擊的重要技術,它對於開放環境中的各種信息系統的安全有重要作用。認證是驗證一個最終用戶或設備的聲明身份的過程。主要目的為:4驗證信息的發送者是真正的,而不是冒充的,這稱為信源識別。5驗證信息的完整性,保證信息在傳送過程中未被竄改,重放或延遲等。認證過程通常涉及加密和密鑰交換。帳戶名和口令認證方式是最常用的一種認證方式。授權是把訪問權授予某一個用戶,用戶組或指定系統的過程。訪問控制是限制系統中的信息只能流到網路中的授權個人或系統。有關認證使用的技術主要有:消息認證,身份認證和數字簽名。消息認證的內容包括為:1證實消息的信源和信宿。2消息內容是或曾受到偶然或有意的篡改。3消息的序號和時間性。消息認證的一般方法為:產生一個附件。身份認證大致分為3類:1個人知道的某種事物。2個人持證3個人特徵。口令或個人識別碼機制是被廣泛研究和使用的一種身份驗證方法,也是最實用的認證系統所依賴的一種機制。為了使口令更加安全,可以通過加密口令或修改加密方法來提供更強健的方法,這就是一次性口令方案,常見的有S/KEY和令牌口令認證方案。持證為個人持有物。數字簽名的兩種格式:2經過密碼變換的被簽名信息整體。3附加在被簽消息之後或某個特定位置上的一段簽名圖樣。對與一個連接來說,維持認證的唯一法是同時使用連接完整性服務。防火牆總體上分為包過濾,應用級網關和代理服務等幾大類型。數據包過濾技術是在網路層對數據包進行選擇。應用級網關是在網路應用層上建立協議過濾和轉發功能。代理服務也稱鏈路級網關或TCP通道,也有人將它歸於應用級網關一類。防火牆是設置在不同網路或網路安全域之間的一系列不見的組合。它可以通過檢測,限制,更改跨越防火牆的數據流,盡可能的對外部屏蔽網路內部的消息,結構和運行情況,以此來實現網路的安全保護。防火牆的設計目標是:1進出內部網的通信量必須通過防火牆。2隻有那些在內部網安全策約中定義了的合法的通信量才能進出防火牆。3防火牆自身應該防止滲透。防火牆能有效的防止外來的入侵,它在網路系統中的作用是:1控制進出網路的信息流向和信息包。2提供使用和流量的日誌和審記。3隱藏內部IP以及網路結構細節。4提供虛擬專用網功能。通常有兩種設計策約:允許所有服務除非被明確禁止;禁止所有服務除非被明確允許。防火牆實現站點安全策約的技術:3服務控制。確定在圍牆外面和裡面可以訪問的INTERNET服務類型。4方向控制。啟動特定的服務請求並允許它通過防火牆,這些操作具有方向性。5用戶控制。根據請求訪問的用戶來確定是或提供該服務。6行為控制。控制如何使用某種特定的服務。影響防火牆系統設計,安裝和使用的網路策約可以分為兩級:高級的網路策約定義允許和禁止的服務以及如何使用服務。低級的網路策約描述了防火牆如何限制和過濾在高級策約中定義的服務。
Ⅲ 傳統的加密方法有哪些
本文只是概述幾種簡單的傳統加密演算法,沒有DES,沒有RSA,沒有想像中的高端大氣上檔次的東東。。。但是都是很傳統很經典的一些演算法
首先,提到加密,比如加密一段文字,讓其不可讀,一般人首先會想到的是將其中的各個字元用其他一些特定的字元代替,比如,講所有的A用C來表示,所有的C用E表示等等…其中早的代替演算法就是由Julius Caesar發明的Caesar,它是用字母表中每個字母的之後的第三個字母來代替其本身的(C=E(3,p)=(p+3) mod 26),但是,這種加密方式,很容易可以用窮舉演算法來破解,畢竟只有25種可能的情況..
為了改進上訴演算法,增加其破解的難度,我們不用簡單的有序的替代方式,我們讓替代無序化,用其中字母表的一個置換(置換:有限元素的集合S的置換就是S的所有元素的有序排列,且每個元素就出現一次,如S={a,b}其置換就只有兩種:ab,ba),這樣的話,就有26!種方式,大大的增加了破解的難度,但是這個世界聰明人太多,雖然26!很多,但是語言本身有一定的特性,每個字母在語言中出現的相對頻率可以統計出來的,這樣子,只要密文有了一定數量,就可以從統計學的角度,得到准確的字母匹配了。
上面的演算法我們稱之為單表代替,其實單表代替密碼之所以較容易被攻破,因為它帶有原始字母使用頻率的一些統計學特徵。有兩種主要的方法可以減少代替密碼里明文結構在密文中的殘留度,一種是對明文中的多個字母一起加密,另一種是採用多表代替密碼。
先說多字母代替吧,最著名的就是playfair密碼,它把明文中的雙字母音節作為一個單元並將其轉換成密文的雙字母音節,它是一個基於由密鑰詞構成的5*5的字母矩陣中的,一個例子,如密鑰為monarchy,將其從左往右從上往下填入後,將剩餘的字母依次填入剩下的空格,其中I/J填入同一個空格:
對明文加密規則如下:
1 若p1 p2在同一行,對應密文c1 c2分別是緊靠p1 p2 右端的字母。其中第一列被看做是最後一列的右方。
2 若p1 p2在同一列,對應密文c1 c2分別是緊靠p1 p2 下方的字母。其中第一行被看做是最後一行的下方。
3 若p1 p2不在同一行,不在同一列,則c1 c2是由p1 p2確定的矩形的其他兩角的字母,並且c1和p1, c2和p2同行。
4 若p1 p2相同,則插入一個事先約定的字母,比如Q 。
5 若明文字母數為奇數時,則在明文的末端添加某個事先約定的字母作為填充。
雖然相對簡單加密,安全性有所提高,但是還是保留了明文語言的大部分結構特徵,依舊可以破解出來,另一個有意思的多表代替密碼是Hill密碼,由數學家Lester Hill提出來的,其實就是利用了線性代數中的可逆矩陣,一個矩陣乘以它的逆矩陣得到單位矩陣,那麼假設我們對密文每m個字母進行加密,那麼將這m個字母在字母表中的序號寫成矩陣形式設為P(如abc,[1,2,3]),密鑰就是一個m階的矩陣K,則C=P*K mod26,,解密的時候只要將密文乘上K的逆矩陣模26就可以了。該方法大大的增加了安全性。
Ⅳ 利用RSA演算法運算,如果p=11,q=13, e=103,對明文3進行加密.求d及密文
取2個質數p=11,q=13,p和q的乘積為n=p×q=143,算出φ(n)=n-p-q+1=120;再選取一個與φ(n)互質的數,例如e=7,則公開密鑰=n,e=143,7.
對於這個e值,用歐幾里德擴展演算法可以算出其逆:d=103.因為e×d=7×103=721,滿足e×d
mod
z
=1;即721
mod
120=1成立.則秘密密鑰=n,d=143,103,
設發送方需要發送機密信息(明文)m=3,發送方已經從公開媒體得到了接收方的公開密鑰n,e=143,7,於是發送方算出加密後的密文c=
m的e次方
mod
n=42
Ⅳ 愷撒密碼關於密鑰到底怎麼用 也就是愷撒密碼2怎麼給明文加密設置密匙,不要復制 要簡單易懂的語言
愷撒密碼最簡單的那種就是將各個字母做一個簡單的移位,復雜一些的愷撒密碼2的話,就是對26個字母不是順序的位移,而是不同的字母有不同的位移。這樣的話,你就需要一個26個字母的密鑰來給26個字母做加密和解密。
Ⅵ 使用RSA公開密鑰體制進行加密,若P=2,q=5,求公鑰e,私鑰d,給出明文m=2的加解密過程
n=P*q=10
n的歐拉值=(p-1)*(q-1)=4
e滿足1<e<n的歐拉值,且 gcd(n的歐拉值,e)=1 所以 e只能為3
d*e=1 mod n的歐拉值 即 d*3= 1 mod 4 所以d可以取3
{3,10}為公鑰 {310}為密鑰
加密:
c=m^e mod n =2^3 mod 10 =8
解密
m=c^d mod n =8^3mod 10 = 2
Ⅶ 十大常見密碼加密方式
一、密鑰散列
採用MD5或者SHA1等散列演算法,對明文進行加密。嚴格來說,MD5不算一種加密演算法,而是一種摘要演算法。無論多長的輸入,MD5都會輸出一個128位(16位元組)的散列值。而SHA1也是流行的消息摘要演算法,它可以生成一個被稱為消息摘要的160位(20位元組)散列值。MD5相對SHA1來說,安全性較低,但是速度快;SHA1和MD5相比安全性高,但是速度慢。
二、對稱加密
採用單鑰密碼系統的加密方法,同一個密鑰可以同時用作信息的加密和解密,這種加密方法稱為對稱加密。對稱加密演算法中常用的演算法有:DES、3DES、TDEA、Blowfish、RC2、RC4、RC5、IDEA、SKIPJACK等。
三、非對稱加密
非對稱加密演算法是一種密鑰的保密方法,它需要兩個密鑰來進行加密和解密,這兩個密鑰是公開密鑰和私有密鑰。公鑰與私鑰是一對,如果用公鑰對數據進行加密,只有用對應的私鑰才能解密。非對稱加密演算法有:RSA、Elgamal、背包演算法、Rabin、D-H、ECC(橢圓曲線加密演算法)。
四、數字簽名
數字簽名(又稱公鑰數字簽名)是只有信息的發送者才能產生的別人無法偽造的一段數字串,這段數字串同時也是對信息的發送者發送信息真實性的一個有效證明。它是一種類似寫在紙上的普通的物理簽名,但是在使用了公鑰加密領域的技術來實現的,用於鑒別數字信息的方法。
五、直接明文保存
早期很多這樣的做法,比如用戶設置的密碼是「123」,直接就將「123」保存到資料庫中,這種是最簡單的保存方式,也是最不安全的方式。但實際上不少互聯網公司,都可能採取的是這種方式。
六、使用MD5、SHA1等單向HASH演算法保護密碼
使用這些演算法後,無法通過計算還原出原始密碼,而且實現比較簡單,因此很多互聯網公司都採用這種方式保存用戶密碼,曾經這種方式也是比較安全的方式,但隨著彩虹表技術的興起,可以建立彩虹表進行查表破解,目前這種方式已經很不安全了。
七、特殊的單向HASH演算法
由於單向HASH演算法在保護密碼方面不再安全,於是有些公司在單向HASH演算法基礎上進行了加鹽、多次HASH等擴展,這些方式可以在一定程度上增加破解難度,對於加了「固定鹽」的HASH演算法,需要保護「鹽」不能泄露,這就會遇到「保護對稱密鑰」一樣的問題,一旦「鹽」泄露,根據「鹽」重新建立彩虹表可以進行破解,對於多次HASH,也只是增加了破解的時間,並沒有本質上的提升。
八、PBKDF2
該演算法原理大致相當於在HASH演算法基礎上增加隨機鹽,並進行多次HASH運算,隨機鹽使得彩虹表的建表難度大幅增加,而多次HASH也使得建表和破解的難度都大幅增加。
九、BCrypt
BCrypt 在1999年就產生了,並且在對抗 GPU/ASIC 方面要優於 PBKDF2,但是我還是不建議你在新系統中使用它,因為它在離線破解的威脅模型分析中表現並不突出。
十、SCrypt
SCrypt 在如今是一個更好的選擇:比 BCrypt設計得更好(尤其是關於內存方面)並且已經在該領域工作了 10 年。另一方面,它也被用於許多加密貨幣,並且我們有一些硬體(包括 FPGA 和 ASIC)能實現它。 盡管它們專門用於采礦,也可以將其重新用於破解。
Ⅷ 對稱加密演算法以及使用方法
加密的原因:保證數據安全
加密必備要素:1、明文/密文 2、秘鑰 3、演算法
秘鑰:在密碼學中是一個定長的字元串、需要根據加密演算法確定其長度
加密演算法解密演算法一般互逆、也可能相同
常用的兩種加密方式:
對稱加密:秘鑰:加密解密使用同一個密鑰、數據的機密性雙向保證、加密效率高、適合加密於大數據大文件、加密強度不高(相對於非對稱加密)
非對稱加密:秘鑰:加密解密使用的不同秘鑰、有兩個密鑰、需要使用密鑰生成演算法生成兩個秘鑰、數據的機密性只能單向加密、如果想解決這個問題、雙向都需要各自有一對秘鑰、加密效率低、加密強度高
公鑰:可以公開出來的密鑰、公鑰加密私鑰解密
私鑰:需要自己妥善保管、不能公開、私鑰加密公鑰解密
安全程度高:多次加密
按位異或運算
凱撒密碼:加密方式 通過將銘文所使用的字母表按照一定的字數平移來進行加密
mod:取余
加密三要素:明文/密文(字母)、秘鑰(3)、演算法(向右平移3/-3)
安全常識:不要使用自己研發的演算法、不要鑽牛角尖、沒必要研究底層實現、了解怎麼應用;低強度的密碼比不進行任何加密更危險;任何密碼都會被破解;密碼只是信息安全的一部分
保證數據的機密性、完整性、認證、不可否認性
計算機操作對象不是文字、而是由0或1排列而成的比特序列、程序存儲在磁碟是二進制的字元串、為比特序列、將現實的東西映射為比特序列的操作稱為編碼、加密又稱之為編碼、解密稱之為解碼、根據ASCII對照表找到對應的數字、轉換成二進制
三種對稱加密演算法:DES\3DES\ AES
DES:已經被破解、除了用它來解密以前的明文、不再使用
密鑰長度為56bit/8、為7byte、每隔7個bit會設置一個用於錯誤檢查的比特、因此實際上是64bit
分組密碼(以組為單位進行處理):加密時是按照一個單位進行加密(8個位元組/64bit為一組)、每一組結合秘鑰通過加密演算法得到密文、加密後的長度不變
3DES:三重DES為了增加DES的強度、將DES重復三次所得到的一種加密演算法 密鑰長度24byte、分成三份 加密--解密--加密 目的:為了兼容DES、秘鑰1秘鑰2相同==三個秘鑰相同 ---加密一次 密鑰1秘鑰3相同--加密三次 三個密鑰不相同最好、此時解密相當於加密、中間的一次解密是為了有三個密鑰相同的情況
此時的解密操作與加密操作互逆,安全、效率低
數據先解密後加密可以么?可以、解密相當於加密、加密解密說的是演算法
AES:(首選推薦)底層演算法為Rijndael 分組長度為128bit、密鑰長度為128bit到256bit范圍內就可以 但是在AES中、密鑰長度只有128bit\192bit\256bit 在go提供的介面中、只能是16位元組(128bit)、其他語言中秘鑰可以選擇
目前為止最安全的、效率高
底層演算法
分組密碼的模式:
按位異或、對數據進行位運算、先將數據轉換成二進制、按位異或操作符^、相同為真、不同為假、非0為假 按位異或一次為加密操作、按位異或兩次為解密操作:a和b按位異或一次、結果再和b按位異或
ECB : 如果明文有規律、加密後的密文有規律不安全、go里不提供該介面、明文分組分成固定大小的塊、如果最後一個分組不滿足分組長度、則需要補位
CBC:密碼鏈
問題:如何對字元串進行按位異或?解決了ECB的規律可查缺點、但是他不能並行處理、最後一個明文分組也需要填充 、初始化向量長度與分組長度相同
CFB:密文反饋模式
不需要填充最後一個分組、對密文進行加密
OFB:
不需要對最後一組進行填充
CTR計數器:
不需要對最後一組進行填充、不需要初始化向量
Go中的實現
官方文檔中:
在創建aes或者是des介面時都是調用如下的方法、返回的block為一個介面
func NewCipher(key [] byte ) ( cipher . Block , error )
type Block interface {
// 返回加密位元組塊的大小
BlockSize() int
// 加密src的第一塊數據並寫入dst,src和dst可指向同一內存地址
Encrypt(dst, src []byte)
// 解密src的第一塊數據並寫入dst,src和dst可指向同一內存地址
Decrypt(dst, src []byte)
}
Block介面代表一個使用特定密鑰的底層塊加/解密器。它提供了加密和解密獨立數據塊的能力。
Block的Encrypt/Decrypt也能進行加密、但是只能加密第一組、因為aes的密鑰長度為16、所以進行操作的第一組數據長度也是16
如果分組模式選擇的是cbc
func NewCBCEncrypter(b Block, iv []byte) BlockMode 加密
func NewCBCDecrypter(b Block, iv []byte) BlockMode 解密
加密解密都調用同一個方法CryptBlocks()
並且cbc分組模式都會遇到明文最後一個分組的補充、所以會用到加密位元組的大小
返回一個密碼分組鏈接模式的、底層用b加密的BlockMode介面,初始向量iv的長度必須等於b的塊尺寸。iv自己定義
返回的BlockMode同樣也是一個介面類型
type BlockMode interface {
// 返回加密位元組塊的大小
BlockSize() int
// 加密或解密連續的數據塊,src的尺寸必須是塊大小的整數倍,src和dst可指向同一內存地址
CryptBlocks(dst, src []byte)
}
BlockMode介面代表一個工作在塊模式(如CBC、ECB等)的加/解密器
返回的BlockMode其實是一個cbc的指針類型中的b和iv
# 加密流程:
1. 創建一個底層使用des/3des/aes的密碼介面 "crypto/des" func NewCipher(key []byte) (cipher.Block, error) # -- des func NewTripleDESCipher(key []byte) (cipher.Block, error) # -- 3des "crypto/aes" func NewCipher(key []byte) (cipher.Block, error) # == aes
2. 如果使用的是cbc/ecb分組模式需要對明文分組進行填充
3. 創建一個密碼分組模式的介面對象 - cbc func NewCBCEncrypter(b Block, iv []byte) BlockMode # 加密 - cfb func NewCFBEncrypter(block Block, iv []byte) Stream # 加密 - ofb - ctr
4. 加密, 得到密文
流程:
填充明文:
先求出最後一組中的位元組數、創建新切片、長度為新切片、值也為切片的長度、然後利用bytes.Reapet將長度換成位元組切片、追加到原明文中
//明文補充
func padPlaintText(plaintText []byte,blockSize int)[]byte{
//1、求出需要填充的個數
padNum := blockSize-len(plaintText) % blockSize
//2、對填充的個數進行操作、與原明文進行合並
newPadding := []byte{byte(padNum)}
newPlain := bytes.Repeat(newPadding,padNum)
plaintText = append(plaintText,newPlain...)
return plaintText
}
去掉填充數據:
拿去切片中的最後一個位元組、得到尾部填充的位元組個數、截取返回
//解密後的明文曲調補充的地方
func createPlaintText(plaintText []byte,blockSize int)[]byte{
//1、得到最後一個位元組、並將位元組轉換成數字、去掉明文中此數字大小的位元組
padNum := int(plaintText[len(plaintText)-1])
newPadding := plaintText[:len(plaintText)-padNum]
return newPadding
}
des加密:
1、創建一個底層使用des的密碼介面、參數為秘鑰、返回一個介面
2、對明文進行填充
3、創建一個cbc模式的介面、需要創建iv初始化向量、返回一個blockmode對象
4、加密、調用blockmode中的cryptBlock函數進行加密、參數為目標參數和源參數
//des利用分組模式cbc進行加密
func EncryptoText(plaintText []byte,key []byte)[]byte{
//1、創建des對象
cipherBlock,err := des.NewCipher(key)
if err != nil {
panic(err)
}
//2、對明文進行填充
newText := padPlaintText(plaintText,cipherBlock.BlockSize())
//3、選擇分組模式、其中向量的長度必須與分組長度相同
iv := make([]byte,cipherBlock.BlockSize())
blockMode := cipher.NewCBCEncrypter(cipherBlock,iv)
//4、加密
blockMode.CryptBlocks(newText,newText)
return newText
}
des解密:
1、創建一個底層使用des的密碼介面、參數為秘鑰、返回一個介面
2、創建一個cbc模式的介面、需要創建iv初始化向量,返回一個blockmode對象
3、加密、調用blockmode中的cryptBlock函數進行解密、參數為目標參數和源參數
4、調用去掉填充數據的方法
//des利用分組模式cbc進行解密
func DecryptoText(cipherText []byte, key []byte)[]byte{
//1、創建des對象
cipherBlock,err := des.NewCipher(key)
if err != nil {
panic(err)
}
//2、創建cbc分組模式介面
iv := []byte("12345678")
blockMode := cipher.NewCBCDecrypter(cipherBlock,iv)
//3、解密
blockMode.CryptBlocks(cipherText,cipherText)
//4、將解密後的數據進行去除填充的數據
newText := clearPlaintText(cipherText,cipherBlock.BlockSize())
return newText
}
Main函數調用
func main(){
//需要進行加密的明文
plaintText := []byte("CBC--密文沒有規律、經常使用的加密方式,最後一個分組需要填充,需要初始化向量" +
"(一個數組、數組的長度與明文分組相等、數據來源:負責加密的人提供,加解密使用的初始化向量必須相同)")
//密鑰Key的長度需要與分組長度相同、且加密解密的密鑰相同
key := []byte("1234abcd")
//調用加密函數
cipherText := EncryptoText(plaintText,key)
newPlaintText := DecryptoText(cipherText,key)
fmt.Println(string(newPlaintText))
}
AES加密解密相同、所以只需要調用一次方法就可以加密、調用兩次則解密
推薦是用分組模式:cbc、ctr
aes利用分組模式cbc進行加密
//對明文進行補充
func paddingPlaintText(plaintText []byte , blockSize int ) []byte {
//1、求出分組余數
padNum := blockSize - len(plaintText) % blockSize
//2、將余數轉換為位元組切片、然後利用bytes.Repeat得出有該余數的大小的位元組切片
padByte := bytes.Repeat([]byte{byte(padNum)},padNum)
//3、將補充的位元組切片添加到原明文中
plaintText = append(plaintText,padByte...)
return plaintText
}
//aes加密
func encryptionText(plaintText []byte, key []byte) []byte {
//1、創建aes對象
block,err := aes.NewCipher(key)
if err != nil {
panic(err)
}
//2、明文補充
newText := paddingPlaintText(plaintText,block.BlockSize())
//3、創建cbc對象
iv := []byte("12345678abcdefgh")
blockMode := cipher.NewCBCEncrypter(block,iv)
//4、加密
blockMode.CryptBlocks(newText,newText)
return newText
}
//解密後的去尾
func clearplaintText(plaintText []byte, blockSize int) []byte {
//1、得到最後一個位元組、並轉換成整型數據
padNum := int(plaintText[len(plaintText)-1])
//2、截取明文位元組中去掉得到的整型數據之前的數據、此處出錯、沒有用len-padNum
newText := plaintText[:len(plaintText)-padNum]
return newText
}
//aes解密
func deCryptionText(crypherText []byte, key []byte ) []byte {
//1、創建aes對象
block, err := aes.NewCipher(key)
if err != nil {
panic(err)
}
//2、創建cbc對象
iv := []byte("12345678abcdefgh")
blockMode := cipher.NewCBCDecrypter(block,iv)
//3、解密
blockMode.CryptBlocks(crypherText,crypherText)
//4、去尾
newText := clearplaintText(crypherText,block.BlockSize())
return newText
}
func main(){
//需要進行加密的明文
plaintText := []byte("CBC--密文沒有規律、經常使用的加密方式,最後一個分組需要填充,需要初始化向量")
//密鑰Key的長度需要與分組長度相同、且加密解密的密鑰相同
key := []byte("12345678abcdefgh")
//調用加密函數
cipherText := encryptionText(plaintText,key)
//調用解密函數
newPlaintText := deCryptionText(cipherText,key)
fmt.Println("解密後",string(newPlaintText))
}
//aes--ctr加密
func encryptionCtrText(plaintText []byte, key []byte) []byte {
//1、創建aes對象
block,err := aes.NewCipher(key)
if err != nil {
panic(err)
}
//2、創建ctr對象,雖然ctr模式不需要iv,但是go中使用ctr時還是需要iv
iv := []byte("12345678abcdefgh")
stream := cipher.NewCTR(block,iv)
stream.XORKeyStream(plaintText,plaintText)
return plaintText
}
func main() {
//aes--ctr加密解密、調用兩次即為解密、因為加密解密函數相同stream.XORKeyStream
ctrcipherText := encryptionCtrText(plaintText, key)
ctrPlaintText := encryptionCtrText(ctrcipherText,key)
fmt.Println("aes解密後", string(ctrPlaintText))
}
英文單詞:
明文:plaintext 密文:ciphertext 填充:padding/fill 去掉clear 加密Encryption 解密Decryption