<strike id="tpvd9"><dfn id="tpvd9"></dfn></strike>

        <em id="tpvd9"></em>

          <address id="tpvd9"></address>
            <dfn id="tpvd9"><sub id="tpvd9"></sub></dfn>

            <thead id="tpvd9"><noframes id="tpvd9">
            <ruby id="tpvd9"></ruby>

                  <thead id="tpvd9"></thead>
                  歡迎您訪(fǎng)問(wèn)鄭州興邦電子股份有限公司官方網(wǎng)站!
                  阿里巴巴誠信通企業(yè)
                  全國咨詢(xún)熱線(xiàn):40000-63966
                  興邦電子,中國水控機第一品牌

                  聯(lián)系興邦電子

                  全國咨詢(xún)熱線(xiàn):40000-63966

                  售后:0371-55132951/55132952

                  工廠(chǎng):河南省 鄭州市 高新區蓮花街電子電器產(chǎn)業(yè)園

                  PBOC/EMV之DES算法

                  文章出處:http://psychicreadingswithdeb.com 作者: 人氣: 發(fā)表時(shí)間:2012年02月19日

                  [文章內容簡(jiǎn)介]:Des是在金融電子領(lǐng)域用的比較多的一種加解密算法,比如POS,ATM,智能IC卡等領(lǐng)域.這個(gè)算法網(wǎng)上可以找到很多,這篇文章只是自己整理一個(gè)版本,加入了一些自己的理解和注釋.

                      Des是在金融電子領(lǐng)域用的比較多的一種加解密算法, 比如POS,ATM,智能IC卡等領(lǐng)域. 這個(gè)算法網(wǎng)上可以找到很多, 這篇文章只是自己整理一個(gè)版本,加入了一些自己的理解和注釋.

                      關(guān)于什么是des算法以及歷史由來(lái)等知識就不在這里廢話(huà)了,直接入正題.

                      首先從一個(gè)高的層次理解des的原理. 
                      Result = Des(data, key, mode);
                      把des看成一個(gè)函數, 它有三個(gè)入參:
                      1 data, 是要加密或解密的數據, 它是一個(gè)8字節的數據, 如果不是8字節,可以通過(guò)補位的方式,補成8字節的倍數.然后就可以分成多個(gè)數據段分別進(jìn)行加密或解密. 
                      2 key, 這個(gè)是用來(lái)加密或解密的密鑰,它一定是一個(gè)8字節的數據. 
                      3 mode, 這個(gè)指示Des的工作模式,即加密或者解密
                      而函數返回的result就是最終加密或解密的結果,這的長(cháng)度和data是一致的.

                      下面就可以深入剖析一下Des具體做什么了. 它有兩個(gè)數據要處理,一個(gè)是data,一個(gè)是key.先來(lái)看看如何處理key

                      Key是一個(gè)8字節的密鑰,在銀行系統中,這個(gè)key一般由一個(gè)主密鑰通過(guò)一個(gè)分散因子分散而來(lái)的. 可以表示如下:
                      Key=k1k2k3…k64
                      這個(gè)數據的第8, 16, 24, 32, 40, 48, 56, 64位(也就是每個(gè)字節的最高位)是用來(lái)做奇偶校驗的,所以真正有效的密鑰位數只有56位.我們把奇偶校驗位去掉, 剩下56位,新的key表示成如下:
                      Key=k1k2k3…k56
                      然后,把key分成相等的兩部分,A和B,即
                      A=k1k2…k28
                      B=k29k30..k56
                      接著(zhù)把A,B中的位的位置分別換一下,換位的規則按照下面的表


                      也就是說(shuō),A的第一位換成原來(lái)輸入的密鑰的第57位, 第二位換成輸入密鑰的第49位等等,同理B也是.
                      最后的結果如下:
                      A=k57k49…k36
                      B=k65k55…k4
                      A和B的位數沒(méi)變,還是28位

                      下面要做的操作是把A,B進(jìn)行移位,循環(huán)左移,移動(dòng)的位數按照下面的表格進(jìn)行:

                   

                      Des的密鑰是經(jīng)過(guò)16次迭代生成的一組16個(gè)密鑰. 上面的表格i表示是第幾次迭代,下面的數據表示該次迭代密鑰循環(huán)左移的位數. 比如第1次迭代循環(huán)左移1位,第3次迭代循環(huán)左移2位等. 而第i次迭代用的輸入數據是第i-1次迭代的結果. 如果用&(i)表示第i次循環(huán)左移操作,則可用如下的公式表示迭代操作:
                      第一次:
                      A(1)=&(1)A
                      B(1)=&(1)B
                      第i次:
                      A(i)=&(i-1)A
                      B(i)=&(i-1)B

                      現在假設第i次迭代后, 生成的A,B如下:
                      A(i)=A(i)1A(i)2….A(i)28
                      B(i)=B(i)1B(i)2….B(i)28

                      然后,把A,B合并, 即
                      C(i)=A(i)B(i), 顯然,C(i)有56位, 然后按照下面的表格,取出這56位中的48個(gè)位重新得到一個(gè)Key(i).

                   

                      也就是說(shuō)生成的密鑰key(i)的第1位,為原來(lái)C(i)的56位密鑰的第14位,key(i)的第2位,是原來(lái)C(i)的56位密鑰的第17位等,最終,生成一個(gè)48位的key(i)=k(i)1k(i)2….k(i)48.
                      因為一共有16次迭代, 所以共有key(0), key(1), key(2),….key(16), 16組key.

                      現在你知道了,最初傳入的8字節(64位)的密鑰最終會(huì )生成16個(gè)48位的密鑰.先不理這些密鑰怎么用, 下面自然會(huì )用到.

                      說(shuō)完了key,該說(shuō)說(shuō)輸入的數據了. 數據也是8字節的數據. 實(shí)際應用中,數據往往不會(huì )剛好是8字節,這時(shí)可以把數據補齊成8的倍數,然后分段加密.

                      假設輸入數據表示成如下:
                      Data=d1d2d3….d64
                      首先把64個(gè)位的位置換一下, 換位的規則按照下面的表:

                   

                      也就是說(shuō),新數據的第1位是原數據的第58位, 新數據的第2位是原數據的第50位,依次類(lèi)推. 新生成的數據如下:
                      Data=d58d50d42….d7
                      為了方便繼續下面的步驟,把上面的數據表示為:
                      changeData=d1d2d3….d64
                      把changeData分成相等的兩部分,即left, right.
                      Left=d1d2…d32
                      Right=d33d34…d64

                      迭代標志:
                      下面的操作要進(jìn)行迭代了,為了描述方便,前面加了一個(gè)迭代標志. 
                      然后,left不變,把right由32位擴展為48位, 擴展的規則由下面的表格指定:

                   

                      你可能奇怪為什么可以換一下位置怎么會(huì )由32位擴展到48位呢,其實(shí)可以看到表格里有一些數據是重復的,也就是說(shuō),48位的數據里有一些重復的. 新生成的right可表示如下:
                      Right=d32d1d2….d1
                      還記得前計算出的16組key嗎, 把key(1)取出來(lái),跟right異或, 得到一個(gè)新的right,表示成如下:
                      Right=r1r2r3…r48

                      接著(zhù)要把這個(gè)48位的right還原成32位,也就是進(jìn)行數據的壓縮,壓縮的步驟如下:
                      1 把right分成8部分,每部分6位,表示如下:
                      a=r1r2…r6
                      b=r7r8..r12
                      c=r13r14..r18
                      d=r19r20…r24
                      e=r25r26..r30
                      f=r31r32..r36
                      g=r37r38..r42
                      h=r43r44..r48

                  第1頁(yè)第2頁(yè)

                  本文關(guān)鍵詞:PBOC,EMV,DES算法,DES
                  回到頂部
                  99久热只有精品视频在线17_精品一区二区三区自拍图片_最新国产v亚洲_久久综合九色综合久
                  <strike id="tpvd9"><dfn id="tpvd9"></dfn></strike>

                        <em id="tpvd9"></em>

                          <address id="tpvd9"></address>
                            <dfn id="tpvd9"><sub id="tpvd9"></sub></dfn>

                            <thead id="tpvd9"><noframes id="tpvd9">
                            <ruby id="tpvd9"></ruby>

                                  <thead id="tpvd9"></thead>