• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      數(shù)據(jù)加密中的DES加密算法詳解

      2009-12-31 00:00:00李新艷
      商場(chǎng)現(xiàn)代化 2009年26期

      [摘要] 本文詳細(xì)介紹了DES數(shù)據(jù)加密算法的原理,并給出了一個(gè)例子演示了如何使用c#中的加密包進(jìn)行DES算法加密,最后對(duì)DES進(jìn)行了評(píng)價(jià)。

      [關(guān)鍵詞] 加密 對(duì)稱 非對(duì)稱 DES 密鑰 明文 密文

      從最初的保密通信發(fā)展到目前的網(wǎng)絡(luò)信息加密,信息加密技術(shù)一直伴隨著信息技術(shù)的發(fā)展而發(fā)展。作為計(jì)算機(jī)信息保護(hù)的最實(shí)用和最可靠的方法,信息加密技術(shù)被廣泛應(yīng)用到信息安全的各個(gè)領(lǐng)域。信息加密技術(shù)是一門涉及數(shù)學(xué)、密碼學(xué)和計(jì)算機(jī)的交叉學(xué)科。現(xiàn)代密碼學(xué)的發(fā)展,使信息加密技術(shù)已經(jīng)不再依賴于對(duì)加密算法本身的保密,而是通過在統(tǒng)計(jì)學(xué)意義上提高破解的成本來提供高加密算法的安全性。

      密碼學(xué)是一門古老而又年輕的科學(xué),它用于保護(hù)軍事和外交通信,可追溯到幾千年前。1976年Diffie和Hellman的“密碼學(xué)的新方向”一文引發(fā)的密碼學(xué)的一場(chǎng)革命,開創(chuàng)了公鑰密碼學(xué)的新紀(jì)元。

      常用加密算法主要用來對(duì)敏感數(shù)據(jù)、摘要、簽名等信息進(jìn)行加密。按照密鑰方式劃分,可分為對(duì)稱加密算法和非對(duì)稱加密算法。

      一、對(duì)稱加密算法

      對(duì)稱加密算法有時(shí)又叫做傳統(tǒng)密碼算法,加密密鑰可以從解密密鑰中推導(dǎo)出來,解密密鑰也可以從加密密鑰中推導(dǎo)出來。在大多數(shù)的對(duì)稱算法中,加密密鑰和解密密鑰是相同的,因此也成為秘密密鑰算法或者單密鑰算法。它要求發(fā)送發(fā)和接收方在安全通信之前先商定一個(gè)密鑰。對(duì)稱算法的安全性依賴于密鑰,所以密鑰的保密性對(duì)通信至關(guān)重要。對(duì)稱加密算法主要有分組加密和流加密兩類。分組加密是指將明文分成固定商都的組,用同一密鑰分別對(duì)每一組加密,輸出固定長度的密文,典型代表:DES、3DES、IDEA。

      二、非對(duì)稱加密算法

      非對(duì)稱加密算法有時(shí)又叫做公開密鑰算法。其中用到兩個(gè)密鑰。一個(gè)是公共的,一個(gè)事私有的。一個(gè)密鑰用于加密,另一個(gè)密鑰用于解密。兩個(gè)密鑰不能夠互相推導(dǎo)。常用的非對(duì)稱加密算法有RSA公鑰算法、Diffie-Hellman算法和ECC橢圓曲線密碼。

      我們?cè)敿?xì)分析一下DES加密算法的處理過程。

      DES加密算法是分組加密算法,明文以64位為單位分成塊。64位數(shù)據(jù)在64位密鑰的控制下,經(jīng)過初始變換后,進(jìn)行16輪加密迭代:64位數(shù)據(jù)被分成左右兩半部分,每部分32位,密鑰與右半部分相結(jié)合,然后再與左半部分相結(jié)合,結(jié)果作為新的右半部分;結(jié)合前的右半部分作為新的左半部分。這一系列步驟組成一輪。這種輪換要重復(fù)16次。最后一輪之后,再進(jìn)行初始置換的逆置換,就得到了64位的密文。

      DES的加密過程可分為加密處理,加密變換和子密鑰生成幾個(gè)部分組成。

      1.加密處理過程

      (1)初始變換。加密處理首先要對(duì)64位的明文按表1所示的初始換位表IP進(jìn)行變換。表中的數(shù)值表示輸入位被置換后的新位置。例如輸入的第58位,在輸出的時(shí)候被置換到第1位;輸入的是第7位,在輸出時(shí)被置換到第64位。

      (2)加密處理。上述換位處理的輸出,中間要經(jīng)過16輪加密變換。初始換位的64位的輸出作為下一次的輸入,將64位分為左、右兩個(gè)32位,分別記為L0和R0,從L0、R0到L16、R16,共進(jìn)行16輪加密變換。其中,經(jīng)過n輪處理后的點(diǎn)左右32位分別為Ln和Rn,則可做如下定義:

      Ln=Rn-1

      Rn=Ln-1

      其中,kn是向第n輪輸入的48位的子密鑰,Ln-1和Rn-1分別是第n-1輪的輸出,f是Mangler函數(shù)。

      (3)最后換位。進(jìn)行16輪的加密變換之后,將L16和R16合成64位的數(shù)據(jù),再按照表2所示的

      最后換位表進(jìn)行IP-1的換位,得到64位的密文,這就是DES算法加密的結(jié)果。

      2.加密變換過程

      通過重復(fù)某些位將32位的右半部分按照擴(kuò)展表3擴(kuò)展換位表擴(kuò)展為48位,而56位的密鑰先移位然后通過選擇其中的某些位減少至48位,48位的右半部分通過異或操作和48位的密鑰結(jié)合,并分成6位的8個(gè)分組,通過8個(gè)S-盒將這48位替代成新的32位數(shù)據(jù),再將其置換一次。這些S-盒輸入6位,輸出4位。S盒如表5所示。

      一個(gè)S盒中具有4種替換表(行號(hào)用0、1、2、3表示),通過輸入的6位的開頭和末尾兩位選定行,然后按選定的替換表將輸入的6位的中間4位進(jìn)行替代,例如:當(dāng)向S1輸入011011時(shí),開頭和結(jié)尾的組合是01,所以選中編號(hào)為1的替代表,根據(jù)中間4位1101,選定第13列,查找表中第1行第13列所示的值為5,即輸出0101,這4位就是經(jīng)過替代后的值。按此進(jìn)行,輸出32位,再按照表4 單純換位表P進(jìn)行變換,這樣就完成了f(R,K)的變換,如圖2所示。

      3.子密鑰生成過程

      鑰通常表示為64位的自然數(shù),首先通過壓縮換位PC-1去掉每個(gè)字節(jié)的第8位,用作奇偶校驗(yàn),因此,密鑰去掉第8、16、24……64位減至56位,所以實(shí)際密鑰長度為56位,而每輪要生成48位的子密鑰。

      輸入的64位密鑰,首先通過壓縮換位得到56位的密鑰,每層分成兩部分,上部分28位為C0,下部分為D0。C0和D0依次進(jìn)行循環(huán)左移操作生成了C1和D1,將C1和D1合成56位,再通過壓縮換位PC-2輸出48位的子密鑰K1,再將C1和D1進(jìn)行循環(huán)左移和PC-2壓縮換位,得到子密鑰K2......以此類推,得到16個(gè)子密鑰。密鑰壓縮換位表如表6所示。在產(chǎn)生子密鑰的過程中,L1、L2、L9、L16是循環(huán)左移1位,其余都是左移2位,左移次數(shù)如表7所示。

      4.解密處理過程

      從密文到明文的解密過程可采用與加密完全相同的算法。不過解密要用加密的逆變換,就是把上面的最后換位表和初始換位表完全倒過來變換。這里不再贅述。

      下面這個(gè)例子中演示了如何使用c#中的加密包進(jìn)行DES算法加密,大家可以借助這個(gè)例子一窺DES加密的用法。

      des_demo.cs代碼如下:

      using System;

      using System.Security.Cryptography;

      using System.IO;

      using System.Text;

      public class EncryptStringDES {

      public static void Main(String[] args) {

      if (args.Length < 1) {

      Console.WriteLine(\"Usage: des_demo

      encrypt>\", args[0]);

      return;

      }

      // 使用UTF8函數(shù)加密輸入?yún)?shù)

      UTF8Encoding utf8Encoding = new UTF8Encoding();

      byte[] inputByteArray = utf8Encoding.GetBytes(args

      [0].ToCharArray());

      // 方式一:調(diào)用默認(rèn)的DES實(shí)現(xiàn)方法DES_CSP.

      DES des = DES.Create();

      // 方式二:直接使用DES_CSP()實(shí)現(xiàn)DES的實(shí)體

      //DES_CSP DES = new DES_CSP();

      // 初始化DES加密的密鑰和一個(gè)隨機(jī)的、8比特的初始化向量(IV)

      Byte[] key = {0x01, 0x23, 0x45, 0x67, 0x89, 0xab,

      0xcd, 0xef};

      Byte[] IV = {0x12, 0x34, 0x56, 0x78, 0x90, 0xab,

      0xcd, 0xef};

      des.Key = key;

      des.IV = IV;

      // 建立加密流

      SymmetricStreamEncryptor sse = des.CreateEncryptor();

      // 使用CryptoMemoryStream方法獲取加密過程的輸出

      CryptoMemoryStream cms = new CryptoMemoryStream();

      // 將SymmetricStreamEncryptor流中的加密數(shù)據(jù)輸出到

      CryptoMemoryStream中

      sse.SetSink(cms);

      // 加密完畢,將結(jié)果輸出到控制臺(tái)

      sse.Write(inputByteArray);

      sse.CloseStream();

      // 獲取加密數(shù)據(jù)

      byte[] encryptedData = cms.Data;

      // 輸出加密后結(jié)果

      Console.WriteLine(\"加密結(jié)果:\");

      for (int i = 0; i < encryptedData.Length; i++) {

      Console.Write(\"{0:X2} \",encryptedData[i]);

      }

      Console.WriteLine();

      //上面演示了如何進(jìn)行加密,下面演示如何進(jìn)行解密

      SymmetricStreamDecryptor ssd = des.CreateDecryptor();

      cms = new CryptoMemoryStream();

      ssd.SetSink(cms);

      ssd.Write(encryptedData);

      ssd.CloseStream();

      byte[] decryptedData = cms.Data;

      char[] decryptedCharArray = utf8Encoding.GetChars(decryptedData);

      Console.WriteLine(\"解密后數(shù)據(jù):\");

      Console.Write(decryptedCharArray);

      Console.WriteLine(); }

      }

      編譯:

      D:\\csharp>csc des_demo.cs

      Microsoft (R) C# Compiler Version 7.00.8905 [NGWS runtime

      2000.14.1812.10]

      Copyright (C) Microsoft Corp 2000. All rights reserved.

      運(yùn)行實(shí)例:

      D:\\csharp>des_demo.exe 使用C#編寫DES加密程序的framework

      加密結(jié)果:

      3D 22 64 C6 57 D1 C4 C3 CF 77 CE 2F D0 E1 78 2A 4D ED 7A A8

      83 F9 0E 14 E1 BA 38

      7B 06 41 8D B5 E9 3F 00 0D C3 28 D1 F9 6D 17 4B 6E A7 41 68

      40

      解密后數(shù)據(jù):

      使用C#編寫DES加密程序的framework

      DES算法具有極高的安全性,到目前為止,除了用窮舉搜索法對(duì)DES算法進(jìn)行攻擊外,還沒有發(fā)現(xiàn)更有效的辦法。通過窮盡搜索空間,可獲得總共256(大約7.2×1016)個(gè)可能的密鑰。如果每秒能檢測(cè)一百萬個(gè)的話,需要2000年完成檢測(cè)。可見,這是很難實(shí)現(xiàn)的。當(dāng)然,隨著科學(xué)技術(shù)的發(fā)展,當(dāng)出現(xiàn)超高速計(jì)算機(jī)后,可以考慮把DES密鑰的長度再增長一些,以此來達(dá)到更高的保密程度。隨著信息化和數(shù)字化社會(huì)的發(fā)展,隨著計(jì)算機(jī)和Inte rnet的普及,密碼學(xué)必將在國家安全、經(jīng)濟(jì)交流、網(wǎng)絡(luò)安全及人民生活等方面發(fā)揮更大作用。

      參考文獻(xiàn):

      [1]葉忠杰:計(jì)算機(jī)網(wǎng)絡(luò)安全技術(shù)(第二版).科學(xué)出版社 2003.8

      [2]王寶會(huì)王大印等:新世紀(jì)計(jì)算機(jī)信息安全教程.電子工業(yè)出版社 2006.1

      [3]Diffie W,Hellman M. New directions in cryptography. IEEE Transactions on Information Theory,1976,22(6):644-654

      [4]張基溫:信息系統(tǒng)安全原理.中國水利水電出版社,2005.1

      [5]顧巧論蔡振山賈春福:計(jì)算機(jī)網(wǎng)絡(luò)安全.科學(xué)出版社,2003.1

      [6]蔡立軍計(jì)算機(jī)網(wǎng)絡(luò)安全技術(shù).中國水利水電出版社,2002.1

      [7] http://www.enet.com.cn

      钦州市| 德清县| 梅州市| 沾益县| 贡觉县| 邹城市| 尚志市| 新竹市| 福泉市| 五常市| 阿拉善左旗| 宜丰县| 汉源县| 兴隆县| 汕尾市| 惠安县| 南华县| 河西区| 新巴尔虎右旗| 长垣县| 钟祥市| 兴文县| 宝兴县| 突泉县| 静安区| 湘阴县| 新乡县| 山丹县| 西藏| 甘德县| 长岭县| 阳泉市| 论坛| 疏勒县| 定结县| 金堂县| 雷州市| 鄱阳县| 阿荣旗| 普兰县| 渑池县|