日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

DES算法流程

發布時間:2025/3/19 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 DES算法流程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

DES數據加密標準 (Data Encryption Standard)是一個16輪的Feistel型結構密碼,它的分組長度為64比特,用一個56比特的密鑰來加密一個64比特的明文串,輸出一個64比特的密文串。其中,使用密鑰為64比特,密鑰位數是56比特,另8位用作奇偶校驗,加密用的位數是48比特。加密的過程是先對64位明文分組進行初始置換,然后分左、右兩部分分別經過16輪迭代,然后再進行循環移位與變換,最后進行逆變換得出密文。加密與解密使用相同的密鑰,因而它屬于對稱密碼體制。
DES算法流程

  • 初始置換IP
  • 生成16個48位的子密鑰
  • 16輪feistel結構迭代
    a) 擴展置換E
    b) S盒代換
    c) 置換P
  • 逆初始置換IP-1

    Feistel結構:feistel結構把任何函數(一般稱為F函數,又稱輪函數)轉化為一個置換。
    子密鑰的生成:子密鑰K的生成大致分成三個過程:置換選擇PC1,循環左移,置換選擇PC2。
    Ln = R(n - 1);
    Rn = L(n - 1)⊕f(Rn-1,kn-1)
    1.初始置換
    DES算法使用64位的密鑰key將64位的明文輸入塊變為64位的密文輸出塊,并把輸出塊分為L0、R0兩部分,每部分均為32位。初始置換規則如下:
    注意:這里的數字表示的是原數據的位置,不是數據

    初始置換把64位明文的第1位置換到第40位,第2位置換到第8位,第3位置換到第48位。以此類推,最后一位是原來的第7位。
    M1=(123456789ABCDEF)16
    =(00000001 00100011 01000101 01100111 10001001 10101011 11001101 11101111)2
    經過IP置換,并分成左右兩部分,結果為:
    L0=11001100 00000000 11001100 11111111
    R0=11110000 10101010 11110000 10101010
    2.生成16個48位的子密鑰
    DES算法由64位秘鑰產生16輪的48位子秘鑰。在每一輪的迭代過程中,使用不同的子秘鑰。

    a、在DES中,每一輪迭代都使用了一個輪密鑰。輪密鑰是從用戶輸入的密鑰k(64位)產生的。實用密鑰是56位,另8位是奇偶校驗位:輸出密鑰k的第8 , 16 , …,64位為奇偶校驗位(每一字節的最后一位),這些位的值使得每個字節恰好包含了奇數個1,這樣如果輸入密鑰中某個字節中存在一個錯誤,奇偶校驗可以幫助查到這些錯誤。根據選擇置換PC-1將這56位分成兩塊C0(28位)和D0(28位);
    b、將C0和D0進行循環左移變化(注:每輪循環左移的位數由輪數決定),變換后生成C1和D1,然后C1和D1合并,并通過選擇置換PC-2生成子密鑰K1(48位);
    c、C1和D1在次經過循環左移變換,生成C2和D2,然后C2和D2合并,通過選擇置換PC-2生成密鑰K2(48位);
    d、以此類推,得到K16(48位)。但是最后一輪的左右兩部分不交換,而是直接合并在一起R16L16,作為逆置換的輸入塊。其中循環左移的位數一共是循環左移16次,其中第一次、第二次、第九次、第十六次是循環左移一位,其他都是左移兩位。

    密鑰置換選擇PC-1(子秘鑰的生成)
    操作對象是64位秘鑰,初始密鑰K=(123DAB779F658067)16
    =(00010010 00111101 10101011 01110111 10011111 01100101 10000000 01100111)2
    64位秘鑰通過縮小選擇換位表1的變換變成56位。如下:

    再將56位秘鑰分成C0和D0:

    C0=(0101010 0101010 0010101 1100001)2
    D0=(1001110 1101110 1000010 1101011)2
    根據輪數,將Cn和Dn分別循環左移1位或2位
    循環左移每輪移動的位數如下:
    第一輪是循環左移1位。循環左移1位后如下:

    C1=(1010100 1010100 0101011 1000010)2
    D1=(0011101 1011101 0000101 1010111)2
    C1和D1合并之后,再經過置換選擇表2生成48位的子秘鑰K1。置換選擇表2(PC-2)如下:
    去掉第9、18、22、25、35、38、43、54位,從56位變成48位,再按表的位置置換。

    K1=(000011 100011 001001 101100 011011 010010 011100 011101)
    C1和D1再次經過循環左移變換,生成C2和D2,C2和D2合并,通過PC-2生成子秘鑰K2。
    以此類推,得到子秘鑰K1~K16。需要注意其中循環左移的位數。
    3.F輪函數
    將明文進行完初始置換IP后,進入輪函數F。輪函數F中包含運算(擴展置換E、S盒代換、置換IP)

    R0=11110000 10101010 11110000 10101010
    K1=000011 100011 001001 101100 011011 010010 011100 011101
    通過擴展置換E,數據的右半部分R0從32位擴展到48位。擴展置換改變了位的次序,重復了某些位。
    擴展置換的目的:
    a、產生與秘鑰相同長度的數據以進行異或運算,R0是32位,子秘鑰是48位,所以R0要先進行擴展置換之后與子秘鑰進行異或運算;
    b、提供更長的結果,使得在替代運算時能夠進行壓縮。

    E(R0)=011110 100001 010101 010101 011110 100001 010101 010101
    E(R0)⊕K1=011101 000010 011100 111001 000101110011 001001 001000
    S盒代換
    在密碼函數f (R , k)中有8個S盒,稱為8個不同的選擇函數,分別用S1,S2,…S8表示。每個S盒都是將6位作為輸入,得到一個4位塊作為輸出。
    以S1為例,若B是6位的一個塊,則S1(B)計算如下:B的第一和最后一位表示從0到3之間的二進制數,令該數為i ;而B的中間4位表示從0到15之間的二進制數,令該數為j;在該表S1中查第i行j列的數,它是從0到15之間的一個數,且唯一地由4位塊代表,則該塊就是輸入B的S1的輸出S1(B)例如對于輸入為101000而言,行是10,即第2行。而列是由0100確定,即第5列,S1盒的第2行與第5列的交叉處即為B,因而輸出為1101,因此1101就是S盒S1在輸入為101000時的輸出。
    在f ( R , k )的計算中,它將由模2加運算得到的b1,b2,…,b48按每6個一組共
    分為8組,順序記為B1,B2,…,B8它們分別經過8個選擇函數 Si運算變成C1,C2,…,C32即
    S1(B1)S2(B2)…S8(B8) = C1,C2,…,C32

    E(R0)⊕K1=011101 000010 011100 111001 000101110011 001001 001000
    S1的輸入為011101,第一位和第六位組成行,行選為01(即第1行),中間四位組成列,列選為1100(即第12列,8+4),行列交叉位置的數為9,其4位二進制表示為1001,所以S1的輸出為1001。

    S2的輸入為000010,第一位和第六位組成行,行選為00(即第0行),中間四位組成列,列選為0001(即第1列),行列交叉位置的數為1,其4位二進制表示為0001,所以S2的輸出為0001。
    S盒的32bit輸出為:
    S(E(R0)⊕K1)=0011 0001 0010 1100 0010 1110 0100 0110
    再經過P盒置換,S-盒代替運算,每一盒得到4位,8盒共得到32位輸出。這32位輸出作為P盒置換的輸入塊。
    P盒置換將每一位輸入位映射到輸出位。任何一位都不能被映射兩次,也不能被略去。
    經過P-1盒置換的結果與最初64位分組的左半部分異或。

    得到函數的輸出:
    f(R0,K1)=00010000 00110010 01010010 11101110
    在初始置換IP中,得知:
    L0=11001100 00000000 11001100 11111111
    通過如下運算可得到第一輪迭代輸出結果的左右兩部分為:
    R1=L0⊕f(R0,K1)=11011100 00110010 10011110 00010001
    L1=R0=11110000 10101010 11110000 10101010
    4.逆初始置換IP-1
    將初始置換進行16次的迭代,即進行16層的加密變換,這個運算過程我們暫時稱為函數f。得到L16和R16,將此作為輸入塊,進行逆置換得到最終的密文輸出塊。逆置換是初始置換的逆運算。從初始置換規則中可以看到,原始數據的第1位置換到了第40位,第2位置換到了第8位。則逆置換就是將第40位置換到第1位,第8位置換到第2位。以此類推,逆置換規則如下

    第16輪迭代輸出結果的左右兩部分為:
    R16=01110010 00010011 01001111 10010011
    L16=10001111 01011110 00000011 10111100
    V=IP-1(R16L16)=10011101 11111101 10100110 10100110 01110011 01000010 01100100 10000011
    微信公眾號鏈接
  • 總結

    以上是生活随笔為你收集整理的DES算法流程的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。