信息安全密码学:DES算法的核心 E盒、S盒、P盒
加密密鑰等于脫密密鑰,或者由一個(gè)可以輕易的計(jì)算出另一個(gè)的密碼體制,稱為單密鑰密碼體制,亦或稱為對(duì)稱密碼體制或傳統(tǒng)密碼體制。其最具代表意義的當(dāng)然屬于DES密碼體制了。
1、DES的設(shè)計(jì)背景
- 1973年5月 NBS(美國(guó)國(guó)家標(biāo)準(zhǔn)局)發(fā)布通告,征集一種加密算法
- 1974年8月 收到了IBM公司提交的算法
- 1976年11月 被推薦為聯(lián)邦標(biāo)準(zhǔn)
- 1977年1月 發(fā)布
- 服役了20年
2、DES加密算法
迭代型分組算法分組長(zhǎng)度/密鑰長(zhǎng)度:64bit有效密鑰長(zhǎng)度:56bit(8bit奇偶校驗(yàn)位)迭代圈數(shù):16圈圈密鑰長(zhǎng)度:48bit(即16圈中每一圈所要用到的密鑰位數(shù)(bit))\color{red}迭代型分組算法\\\;\\\color{brown}分組長(zhǎng)度/密鑰長(zhǎng)度:\color{red}64bit\\ \color{brown}有效密鑰長(zhǎng)度:\color{red}56bit(8bit奇偶校驗(yàn)位)\\ \color{brown}迭代圈數(shù):\color{red}16圈\\ \color{brown}圈密鑰長(zhǎng)度:\color{red}48bit(即16圈中每一圈所要用到的密鑰位數(shù)(bit))迭代型分組算法分組長(zhǎng)度/密鑰長(zhǎng)度:64bit有效密鑰長(zhǎng)度:56bit(8bit奇偶校驗(yàn)位)迭代圈數(shù):16圈圈密鑰長(zhǎng)度:48bit(即16圈中每一圈所要用到的密鑰位數(shù)(bit))
形式化表達(dá)為:DES(M)=IP?1°T(16)°T(15)°...°T(1)°IP(m)(由后向前運(yùn)算)DES(M)=IP^{-1}\circ T(16)\circ T(15)\circ...\circ T(1)\circ IP(m)(由后向前運(yùn)算)DES(M)=IP?1°T(16)°T(15)°...°T(1)°IP(m)(由后向前運(yùn)算)
IP是初始置換,IP-1是初始逆置換,T表示16組迭代圈函數(shù)。
圖形化表達(dá):
#mermaid-svg-aWkJIWXAooKcdspR .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-aWkJIWXAooKcdspR .label text{fill:#333}#mermaid-svg-aWkJIWXAooKcdspR .node rect,#mermaid-svg-aWkJIWXAooKcdspR .node circle,#mermaid-svg-aWkJIWXAooKcdspR .node ellipse,#mermaid-svg-aWkJIWXAooKcdspR .node polygon,#mermaid-svg-aWkJIWXAooKcdspR .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-aWkJIWXAooKcdspR .node .label{text-align:center;fill:#333}#mermaid-svg-aWkJIWXAooKcdspR .node.clickable{cursor:pointer}#mermaid-svg-aWkJIWXAooKcdspR .arrowheadPath{fill:#333}#mermaid-svg-aWkJIWXAooKcdspR .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-aWkJIWXAooKcdspR .flowchart-link{stroke:#333;fill:none}#mermaid-svg-aWkJIWXAooKcdspR .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-aWkJIWXAooKcdspR .edgeLabel rect{opacity:0.9}#mermaid-svg-aWkJIWXAooKcdspR .edgeLabel span{color:#333}#mermaid-svg-aWkJIWXAooKcdspR .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-aWkJIWXAooKcdspR .cluster text{fill:#333}#mermaid-svg-aWkJIWXAooKcdspR div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-aWkJIWXAooKcdspR .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-aWkJIWXAooKcdspR text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-aWkJIWXAooKcdspR .actor-line{stroke:grey}#mermaid-svg-aWkJIWXAooKcdspR .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-aWkJIWXAooKcdspR .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-aWkJIWXAooKcdspR #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-aWkJIWXAooKcdspR .sequenceNumber{fill:#fff}#mermaid-svg-aWkJIWXAooKcdspR #sequencenumber{fill:#333}#mermaid-svg-aWkJIWXAooKcdspR #crosshead path{fill:#333;stroke:#333}#mermaid-svg-aWkJIWXAooKcdspR .messageText{fill:#333;stroke:#333}#mermaid-svg-aWkJIWXAooKcdspR .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-aWkJIWXAooKcdspR .labelText,#mermaid-svg-aWkJIWXAooKcdspR .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-aWkJIWXAooKcdspR .loopText,#mermaid-svg-aWkJIWXAooKcdspR .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-aWkJIWXAooKcdspR .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-aWkJIWXAooKcdspR .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-aWkJIWXAooKcdspR .noteText,#mermaid-svg-aWkJIWXAooKcdspR .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-aWkJIWXAooKcdspR .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-aWkJIWXAooKcdspR .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-aWkJIWXAooKcdspR .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-aWkJIWXAooKcdspR .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-aWkJIWXAooKcdspR .section{stroke:none;opacity:0.2}#mermaid-svg-aWkJIWXAooKcdspR .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-aWkJIWXAooKcdspR .section2{fill:#fff400}#mermaid-svg-aWkJIWXAooKcdspR .section1,#mermaid-svg-aWkJIWXAooKcdspR .section3{fill:#fff;opacity:0.2}#mermaid-svg-aWkJIWXAooKcdspR .sectionTitle0{fill:#333}#mermaid-svg-aWkJIWXAooKcdspR .sectionTitle1{fill:#333}#mermaid-svg-aWkJIWXAooKcdspR .sectionTitle2{fill:#333}#mermaid-svg-aWkJIWXAooKcdspR .sectionTitle3{fill:#333}#mermaid-svg-aWkJIWXAooKcdspR .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-aWkJIWXAooKcdspR .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-aWkJIWXAooKcdspR .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-aWkJIWXAooKcdspR .grid path{stroke-width:0}#mermaid-svg-aWkJIWXAooKcdspR .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-aWkJIWXAooKcdspR .task{stroke-width:2}#mermaid-svg-aWkJIWXAooKcdspR .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-aWkJIWXAooKcdspR .taskText:not([font-size]){font-size:11px}#mermaid-svg-aWkJIWXAooKcdspR .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-aWkJIWXAooKcdspR .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-aWkJIWXAooKcdspR .task.clickable{cursor:pointer}#mermaid-svg-aWkJIWXAooKcdspR .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-aWkJIWXAooKcdspR .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-aWkJIWXAooKcdspR .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-aWkJIWXAooKcdspR .taskText0,#mermaid-svg-aWkJIWXAooKcdspR .taskText1,#mermaid-svg-aWkJIWXAooKcdspR .taskText2,#mermaid-svg-aWkJIWXAooKcdspR .taskText3{fill:#fff}#mermaid-svg-aWkJIWXAooKcdspR .task0,#mermaid-svg-aWkJIWXAooKcdspR .task1,#mermaid-svg-aWkJIWXAooKcdspR .task2,#mermaid-svg-aWkJIWXAooKcdspR .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-aWkJIWXAooKcdspR .taskTextOutside0,#mermaid-svg-aWkJIWXAooKcdspR .taskTextOutside2{fill:#000}#mermaid-svg-aWkJIWXAooKcdspR .taskTextOutside1,#mermaid-svg-aWkJIWXAooKcdspR .taskTextOutside3{fill:#000}#mermaid-svg-aWkJIWXAooKcdspR .active0,#mermaid-svg-aWkJIWXAooKcdspR .active1,#mermaid-svg-aWkJIWXAooKcdspR .active2,#mermaid-svg-aWkJIWXAooKcdspR .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-aWkJIWXAooKcdspR .activeText0,#mermaid-svg-aWkJIWXAooKcdspR .activeText1,#mermaid-svg-aWkJIWXAooKcdspR .activeText2,#mermaid-svg-aWkJIWXAooKcdspR .activeText3{fill:#000 !important}#mermaid-svg-aWkJIWXAooKcdspR .done0,#mermaid-svg-aWkJIWXAooKcdspR .done1,#mermaid-svg-aWkJIWXAooKcdspR .done2,#mermaid-svg-aWkJIWXAooKcdspR .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-aWkJIWXAooKcdspR .doneText0,#mermaid-svg-aWkJIWXAooKcdspR .doneText1,#mermaid-svg-aWkJIWXAooKcdspR .doneText2,#mermaid-svg-aWkJIWXAooKcdspR .doneText3{fill:#000 !important}#mermaid-svg-aWkJIWXAooKcdspR .crit0,#mermaid-svg-aWkJIWXAooKcdspR .crit1,#mermaid-svg-aWkJIWXAooKcdspR .crit2,#mermaid-svg-aWkJIWXAooKcdspR .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-aWkJIWXAooKcdspR .activeCrit0,#mermaid-svg-aWkJIWXAooKcdspR .activeCrit1,#mermaid-svg-aWkJIWXAooKcdspR .activeCrit2,#mermaid-svg-aWkJIWXAooKcdspR .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-aWkJIWXAooKcdspR .doneCrit0,#mermaid-svg-aWkJIWXAooKcdspR .doneCrit1,#mermaid-svg-aWkJIWXAooKcdspR .doneCrit2,#mermaid-svg-aWkJIWXAooKcdspR .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-aWkJIWXAooKcdspR .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-aWkJIWXAooKcdspR .milestoneText{font-style:italic}#mermaid-svg-aWkJIWXAooKcdspR .doneCritText0,#mermaid-svg-aWkJIWXAooKcdspR .doneCritText1,#mermaid-svg-aWkJIWXAooKcdspR .doneCritText2,#mermaid-svg-aWkJIWXAooKcdspR .doneCritText3{fill:#000 !important}#mermaid-svg-aWkJIWXAooKcdspR .activeCritText0,#mermaid-svg-aWkJIWXAooKcdspR .activeCritText1,#mermaid-svg-aWkJIWXAooKcdspR .activeCritText2,#mermaid-svg-aWkJIWXAooKcdspR .activeCritText3{fill:#000 !important}#mermaid-svg-aWkJIWXAooKcdspR .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-aWkJIWXAooKcdspR g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-aWkJIWXAooKcdspR g.classGroup text .title{font-weight:bolder}#mermaid-svg-aWkJIWXAooKcdspR g.clickable{cursor:pointer}#mermaid-svg-aWkJIWXAooKcdspR g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-aWkJIWXAooKcdspR g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-aWkJIWXAooKcdspR .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-aWkJIWXAooKcdspR .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-aWkJIWXAooKcdspR .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-aWkJIWXAooKcdspR .dashed-line{stroke-dasharray:3}#mermaid-svg-aWkJIWXAooKcdspR #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-aWkJIWXAooKcdspR #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-aWkJIWXAooKcdspR #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-aWkJIWXAooKcdspR #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-aWkJIWXAooKcdspR #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-aWkJIWXAooKcdspR #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-aWkJIWXAooKcdspR #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-aWkJIWXAooKcdspR #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-aWkJIWXAooKcdspR .commit-id,#mermaid-svg-aWkJIWXAooKcdspR .commit-msg,#mermaid-svg-aWkJIWXAooKcdspR .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-aWkJIWXAooKcdspR .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-aWkJIWXAooKcdspR .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-aWkJIWXAooKcdspR g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-aWkJIWXAooKcdspR g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-aWkJIWXAooKcdspR g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-aWkJIWXAooKcdspR g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-aWkJIWXAooKcdspR g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-aWkJIWXAooKcdspR g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-aWkJIWXAooKcdspR .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-aWkJIWXAooKcdspR .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-aWkJIWXAooKcdspR .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-aWkJIWXAooKcdspR .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-aWkJIWXAooKcdspR .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-aWkJIWXAooKcdspR .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-aWkJIWXAooKcdspR .edgeLabel text{fill:#333}#mermaid-svg-aWkJIWXAooKcdspR .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-aWkJIWXAooKcdspR .node circle.state-start{fill:black;stroke:black}#mermaid-svg-aWkJIWXAooKcdspR .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-aWkJIWXAooKcdspR #statediagram-barbEnd{fill:#9370db}#mermaid-svg-aWkJIWXAooKcdspR .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-aWkJIWXAooKcdspR .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-aWkJIWXAooKcdspR .statediagram-state .divider{stroke:#9370db}#mermaid-svg-aWkJIWXAooKcdspR .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-aWkJIWXAooKcdspR .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-aWkJIWXAooKcdspR .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-aWkJIWXAooKcdspR .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-aWkJIWXAooKcdspR .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-aWkJIWXAooKcdspR .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-aWkJIWXAooKcdspR .note-edge{stroke-dasharray:5}#mermaid-svg-aWkJIWXAooKcdspR .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-aWkJIWXAooKcdspR .error-icon{fill:#522}#mermaid-svg-aWkJIWXAooKcdspR .error-text{fill:#522;stroke:#522}#mermaid-svg-aWkJIWXAooKcdspR .edge-thickness-normal{stroke-width:2px}#mermaid-svg-aWkJIWXAooKcdspR .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-aWkJIWXAooKcdspR .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-aWkJIWXAooKcdspR .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-aWkJIWXAooKcdspR .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-aWkJIWXAooKcdspR .marker{fill:#333}#mermaid-svg-aWkJIWXAooKcdspR .marker.cross{stroke:#333}:root { --mermaid-font-family: "trebuchet ms", verdana, arial;}#mermaid-svg-aWkJIWXAooKcdspR {color: rgba(0, 0, 0, 0.75);font: ;}64bit64bit64bit64bit明文m初始置換<IP>圈1圈2圈3....圈16初始逆置換密文c前15圈的算法結(jié)構(gòu)相同,16圈中每一圈都有不同的密鑰值\color{gray}前15圈的算法結(jié)構(gòu)相同,16圈中每一圈都有不同的密鑰值前15圈的算法結(jié)構(gòu)相同,16圈中每一圈都有不同的密鑰值
由上圖可知,前15圈模2加(亦或)后,左右進(jìn)行了互換,而在第16圈則沒有。初始置換后,將64bit數(shù)據(jù)等分為2份32bit分別給予了L0(Left)和R0(Right)由上圖可知,前15圈模2加(亦或)后,左右進(jìn)行了互換,而在第16圈則沒有。\\ 初始置換后,將64bit數(shù)據(jù)等分為2份32bit 分別給予了L_0(Left) 和 R_0(Right)由上圖可知,前15圈模2加(亦或)后,左右進(jìn)行了互換,而在第16圈則沒有。初始置換后,將64bit數(shù)據(jù)等分為2份32bit分別給予了L0?(Left)和R0?(Right)
2.1初始置換IP與逆初始置換IP?12.1\;初始置換IP與逆初始置換IP^{-1}2.1初始置換IP與逆初始置換IP?1
若某一位經(jīng)過初始置換又經(jīng)過了逆初始置換,則其位置并沒有發(fā)生改變。即,IP和IP-1互逆
如IP轉(zhuǎn)換表中,第8位對(duì)應(yīng)了數(shù)字2,即表示對(duì)應(yīng)著第2位;
而在IP-1轉(zhuǎn)換表中,第二位對(duì)應(yīng)了數(shù)字8,即表示對(duì)應(yīng)著第8位;
此時(shí)正好又將位置轉(zhuǎn)換了回去。之前有提到過置換是一種古典密碼\color{gray}之前有提到過置換是一種古典密碼之前有提到過置換是一種古典密碼 置換密碼.
所以在設(shè)計(jì)置換表時(shí)可以參照此原則。
2.2圈函數(shù)2.2\;圈函數(shù)2.2圈函數(shù)
前15圈
右上角的Li?1L_{i-1}Li?1?應(yīng)該是Ri?1R_{i-1}Ri?1?
- 本一圈的右部Ri?1R_{i-1}Ri?1? 直接作為下一圈的左部LiL_{i}Li? 進(jìn)行后續(xù)的運(yùn)算
- 本一圈的(左部Li?1L_{i-1}Li?1?) 要與(經(jīng)過 f函數(shù)f函數(shù)f函數(shù) 的 Ri?1R_{i-1}Ri?1? 和本圈密鑰kik_{i}ki? 所得到的結(jié)果,f(Ri?1,ki)f(R_{i-1},k_{i})f(Ri?1?,ki?))進(jìn)行模二加(亦或)運(yùn)算之后作為下一圈的右部RiR_{i}Ri? 進(jìn)行后續(xù)的運(yùn)算
表達(dá)式為:(左部,右部)=(Li,Ri)=(Ri,Li?1?f(Ri?1,ki))?模2加:0+0=0;0+1=1+0=1;1+1=0f(Ri?1,ki):表示在密鑰ki的影響下Ri?1的值。\:\\\color {red}表達(dá)式為:(左部,右部)=(L_{i},R_{i})=(R_{i},L_{i-1} \bigoplus f(R_{i-1},k_{i}))\\\;\\\color{blue}\bigoplus 模2加:0+0=0;0+1=1+0=1;1+1=0\\f(R_{i-1},k_{i}):表示在密鑰k_i的影響下R_{i-1}的值。表達(dá)式為:(左部,右部)=(Li?,Ri?)=(Ri?,Li?1??f(Ri?1?,ki?))?模2加:0+0=0;0+1=1+0=1;1+1=0f(Ri?1?,ki?):表示在密鑰ki?的影響下Ri?1?的值。
第16圈
(左部,右部)=(L16,R16)=(L15?1?f(k16,R15?1),R15)\color{red}(左部,右部)=(L_{16},R_{16})=(L_{15-1} \bigoplus f(k_{16},R_{15-1}),R_{15})(左部,右部)=(L16?,R16?)=(L15?1??f(k16?,R15?1?),R15?)
\;
同前15圈相比,其左右部,一定意義上講,沒有發(fā)生交換。
- 這里的ki是由64bit密鑰產(chǎn)生的子密鑰,ki是48bit。DES的核心在于f(Ri?1,ki)函數(shù)的功能。f函數(shù)是將32bit的輸入轉(zhuǎn)化為32bit的輸出。其中涉及到了擴(kuò)展和壓縮。擴(kuò)展是為了能和ki進(jìn)行模2加,壓縮是為了最后要輸出32bit\color{gray}這里的k_i是由64bit密鑰產(chǎn)生的子密鑰,k_i是48bit。\\ {\color{red}DES的核心在于f(R_{i-1},k_{i})函數(shù)的功能。}f函數(shù)是將32bit的輸入轉(zhuǎn)化為32bit的輸出。\\ 其中涉及到了擴(kuò)展和壓縮。擴(kuò)展是為了能和k_i進(jìn)行模2加,壓縮是為了最后要輸出32bit這里的ki?是由64bit密鑰產(chǎn)生的子密鑰,ki?是48bit。DES的核心在于f(Ri?1?,ki?)函數(shù)的功能。f函數(shù)是將32bit的輸入轉(zhuǎn)化為32bit的輸出。其中涉及到了擴(kuò)展和壓縮。擴(kuò)展是為了能和ki?進(jìn)行模2加,壓縮是為了最后要輸出32bit
2.3f函數(shù)的構(gòu)造2.3\:f函數(shù)的構(gòu)造2.3f函數(shù)的構(gòu)造
f函數(shù)的內(nèi)部構(gòu)造:E盒擴(kuò)展;E盒擴(kuò)展后的值與圈密鑰k進(jìn)行模2加;(亦或運(yùn)算)S盒轉(zhuǎn)換;(分為8個(gè)部分)P盒變換;\color{gray}f函數(shù)的內(nèi)部構(gòu)造:\\\color{blue}\;E盒擴(kuò)展;\\E盒擴(kuò)展后的值與圈密鑰k進(jìn)行模2加;(亦或運(yùn)算)\\\;S盒轉(zhuǎn)換;(分為8個(gè)部分)\\\;P盒變換;f函數(shù)的內(nèi)部構(gòu)造:E盒擴(kuò)展;E盒擴(kuò)展后的值與圈密鑰k進(jìn)行模2加;(亦或運(yùn)算)S盒轉(zhuǎn)換;(分為8個(gè)部分)P盒變換;
圖形化表示:圖形化表示:圖形化表示:
E盒擴(kuò)展:\color{blue}E盒擴(kuò)展:E盒擴(kuò)展:
將32bit擴(kuò)展到48bit,先將32bit的字符分為8組,每一組的前后,分別添加上一個(gè)字符和下一個(gè)字符:
將12345678910111213141516......29303132?32123454567898910111213121314151617............28293031321將 \begin{matrix} 1 & 2 & 3 & 4 \\ 5 & 6 & 7 & 8 \\ 9 & 10 &11 & 12 \\ 13 & 14 &15 & 16 \\ &...... \\ 29 & 30 &31 & 32 \\ \end{matrix} \implies \begin{matrix} {\color{red}32} & 1 & 2 & 3 & 4 & {\color{red}5}\\ {\color{red}4} & 5 & 6 & 7 & 8 & {\color{red}9} \\ {\color{red}8} & 9 & 10 &11 & 12 & {\color{red}13} \\ {\color{red}12} & 13 & 14 &15 & 16 & {\color{red}17} \\ {\color{red}...} & &...... & &&{\color{red}...}\\ {\color{red}28} & 29 & 30 &31 & 32 & {\color{red}1} \\ \end{matrix} 將1591329?261014......30?37111531?48121632??324812...28?1591329?261014......30?37111531?48121632?591317...1?
如,在下標(biāo)為1的字符前插入上一個(gè)字符。即,下標(biāo)為32的字符;在下標(biāo)為4的字符后插入下一個(gè)字符。即,下標(biāo)為5的字符;在下標(biāo)為32的字符后插入下一個(gè)字符。即,下標(biāo)為1的字符;按照此規(guī)律擴(kuò)展16bit。如,\\\color{blue}在下標(biāo)為1的字符前插入上一個(gè)字符。即,下標(biāo)為32的字符;\\在下標(biāo)為4的字符后插入下一個(gè)字符。即,下標(biāo)為5的字符;\\在下標(biāo)為32的字符后插入下一個(gè)字符。即,下標(biāo)為1的字符;\\按照此規(guī)律擴(kuò)展16bit。如,在下標(biāo)為1的字符前插入上一個(gè)字符。即,下標(biāo)為32的字符;在下標(biāo)為4的字符后插入下一個(gè)字符。即,下標(biāo)為5的字符;在下標(biāo)為32的字符后插入下一個(gè)字符。即,下標(biāo)為1的字符;按照此規(guī)律擴(kuò)展16bit。
模2加\color{blue}模2加模2加
就令經(jīng)過E盒擴(kuò)展后的48個(gè)2進(jìn)制位逐一與密鑰的48bit進(jìn)行亦或運(yùn)算。
S盒代替\color{blue}S盒代替S盒代替
將48bit轉(zhuǎn)換為32bit
S盒是唯一的非線性變換(非數(shù)學(xué)變換),其是DES中f函數(shù)的核心,S盒的好壞決定了該算法。S盒是唯一的非線性變換(非數(shù)學(xué)變換),其是DES中f函數(shù)的核心,S盒的好壞決定了該算法。S盒是唯一的非線性變換(非數(shù)學(xué)變換),其是DES中f函數(shù)的核心,S盒的好壞決定了該算法。
該S盒分為了8個(gè)子盒,對(duì)應(yīng)著8張表(Si),每個(gè)表是4行16列,每個(gè)子盒的輸入為6bit,輸出為4bit該S盒分為了8個(gè)子盒,對(duì)應(yīng)著8張表(S_i),每個(gè)表是4行16列,每個(gè)子盒的輸入為6bit,輸出為4bit該S盒分為了8個(gè)子盒,對(duì)應(yīng)著8張表(Si?),每個(gè)表是4行16列,每個(gè)子盒的輸入為6bit,輸出為4bit
先將輸入的48bit分為8組6bit的數(shù)據(jù)對(duì)應(yīng)于8個(gè)子盒,
假定輸入Si盒的6個(gè)bit為b1b2b3b4b5b6(這里每一個(gè)b都是一個(gè)二進(jìn)制位)另b1b6為十進(jìn)制的n,令b2b3b4b5為十進(jìn)制的m,在設(shè)計(jì)的表中找出對(duì)應(yīng)的n行m列對(duì)應(yīng)的數(shù)字,并轉(zhuǎn)換為2進(jìn)制作為本si盒的輸出下面有栗子:假定輸入S_i盒的6個(gè)bit為b_1b_2b_3b_4b_5b_6(這里每一個(gè)b都是一個(gè)二進(jìn)制位)\\另b_1b_6為十進(jìn)制的n,令b_2b_3b_4b_5為十進(jìn)制的m,\\在設(shè)計(jì)的表中找出對(duì)應(yīng)的n行m列對(duì)應(yīng)的數(shù)字,并轉(zhuǎn)換為2進(jìn)制作為本s_i盒的輸出\\{\color{red}下面有栗子:}假定輸入Si?盒的6個(gè)bit為b1?b2?b3?b4?b5?b6?(這里每一個(gè)b都是一個(gè)二進(jìn)制位)另b1?b6?為十進(jìn)制的n,令b2?b3?b4?b5?為十進(jìn)制的m,在設(shè)計(jì)的表中找出對(duì)應(yīng)的n行m列對(duì)應(yīng)的數(shù)字,并轉(zhuǎn)換為2進(jìn)制作為本si?盒的輸出下面有栗子:
栗子:如,向s1盒中輸入的6bit數(shù)為:101101b1b6為11,即十進(jìn)制的3b2b3b4b5為0110,即十進(jìn)制的6在s1中,第3行6列對(duì)應(yīng)著數(shù)字1所以最后的輸出為00018組中每一個(gè)都會(huì)得到4bit的數(shù)據(jù),最終會(huì)得到32bit的數(shù)據(jù){\color{red}栗子:}如,向s_1盒中輸入的6bit數(shù)為:101101\\b_1b_6為11,即十進(jìn)制的3\\b_2b_3b_4b_5為0110,即十進(jìn)制的6\\在s_1中,第3行6列對(duì)應(yīng)著數(shù)字1\\所以最后的輸出為0001\\{\color{gray}8組中每一個(gè)都會(huì)得到4bit的數(shù)據(jù),最終會(huì)得到32bit的數(shù)據(jù)}栗子:如,向s1?盒中輸入的6bit數(shù)為:101101b1?b6?為11,即十進(jìn)制的3b2?b3?b4?b5?為0110,即十進(jìn)制的6在s1?中,第3行6列對(duì)應(yīng)著數(shù)字1所以最后的輸出為00018組中每一個(gè)都會(huì)得到4bit的數(shù)據(jù),最終會(huì)得到32bit的數(shù)據(jù)
S盒作為DES的心臟,DES靠它實(shí)現(xiàn)非線性變換\color{red}S盒作為DES的心臟,DES靠它實(shí)現(xiàn)非線性變換S盒作為DES的心臟,DES靠它實(shí)現(xiàn)非線性變換
P盒轉(zhuǎn)換:\color{blue}P盒轉(zhuǎn)換:P盒轉(zhuǎn)換:
其本質(zhì)是一種置換
\;
如原來的第1個(gè)bit被置換到第16個(gè)bit
該表格滿足分組擴(kuò)散與混亂原則。
3、密鑰生成算法
加密的基本流程已經(jīng)介紹完畢,那么如何將64bit的初始密鑰生成16組48bit的圈密鑰(子密鑰)供每一圈使用呢?
圖形化表達(dá)為:圖形化表達(dá)為:圖形化表達(dá)為:
PC?1為,置換選擇算法1(由64位篩選出56位);\color{blue}{\color{red}PC-1}為,置換選擇算法1(由64位篩選出56位);PC?1為,置換選擇算法1(由64位篩選出56位);
C和D是兩個(gè)寄存器;\color{blue}{\color{red}C和D}是兩個(gè)寄存器;C和D是兩個(gè)寄存器;
LS為移位運(yùn)算(循環(huán)左移)\color{blue}{\color{red}LS}為移位運(yùn)算(循環(huán)左移)LS為移位運(yùn)算(循環(huán)左移)
PC?2為,置換選擇算法2(由58位選出48位的圈密鑰)\color{blue}{\color{red}PC-2}為,置換選擇算法2(由58位選出48位的圈密鑰)PC?2為,置換選擇算法2(由58位選出48位的圈密鑰)
置換選擇1(PC?1)\color{blue}置換選擇1(PC-1)置換選擇1(PC?1)
置換規(guī)則:
如,將原來的第57bit換到第1位。置換后的前28bit放在C寄存器中,其余的放在D寄存器中。
移位(LS)【兩個(gè)28位密鑰的寄存器循環(huán)左移】\color{blue}移位(LS)【兩個(gè)28位密鑰的寄存器循環(huán)左移】移位(LS)【兩個(gè)28位密鑰的寄存器循環(huán)左移】
規(guī)則:第1,2,9,16圈左移1位;其余都左移2位。{\color{red}規(guī)則:}\\第1,2,9,16圈左移1位;\\其余都左移2位。規(guī)則:第1,2,9,16圈左移1位;其余都左移2位。
LS1、LS2、LS9、LS16左移1位,其余LSi左移2位LS_1、LS_2、LS_9、LS_{16} 左移1位,其余LS_i左移2位LS1?、LS2?、LS9?、LS16?左移1位,其余LSi?左移2位
最后16圈左移結(jié)束后,移位數(shù)正好等于28\color{gray}最后16圈左移結(jié)束后,移位數(shù)正好等于28最后16圈左移結(jié)束后,移位數(shù)正好等于28
置換選擇(PC?2)【由56位得到48位】\color{blue}置換選擇(PC-2)【由56位得到48位】置換選擇(PC?2)【由56位得到48位】
按照此規(guī)則進(jìn)行置換,同時(shí)去除了8位
4、脫密算法
DES的解密過程和DES加密完全類似,只不過將16圈的子密鑰序列顛倒了一下,即,第一圈用k16k_{16}k16? 最后一圈用k1k_{1}k1?。
形式化表達(dá)為:DES?1=IP?1°T(1)°T(2)°...°T(16)°IP(c)(由后向前運(yùn)算)形式化表達(dá)為:\\\color{red}DES^{-1}=IP^{-1}\circ T(1)\circ T(2)\circ...\circ T(16)\circ IP(c) (由后向前運(yùn)算)形式化表達(dá)為:DES?1=IP?1°T(1)°T(2)°...°T(16)°IP(c)(由后向前運(yùn)算)
所以脫密的算法就在于圈密鑰如何進(jìn)行計(jì)算的
圈函數(shù)的分解:\color{blue}圈函數(shù)的分解:圈函數(shù)的分解:
一般地,圈函數(shù)可以表達(dá)為:(左,右)=(x,y)=(y,x?f(y,k))(左,右)=(x,y)=(y,x\bigoplus f(y,k))(左,右)=(x,y)=(y,x?f(y,k)),第16圈顯然不能用這個(gè)表示。
可將其看作兩部分,
步驟一樣,為了方便表示,我們將圈迭代看成3圈,最后一圈同第16圈一樣,僅有對(duì)合變換1\color{gray}步驟一樣,為了方便表示,我們將圈迭代看成3圈,最后一圈同第16圈一樣,僅有對(duì)合變換1步驟一樣,為了方便表示,我們將圈迭代看成3圈,最后一圈同第16圈一樣,僅有對(duì)合變換1
#mermaid-svg-HCiVzkgu8ZexoO9L .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-HCiVzkgu8ZexoO9L .label text{fill:#333}#mermaid-svg-HCiVzkgu8ZexoO9L .node rect,#mermaid-svg-HCiVzkgu8ZexoO9L .node circle,#mermaid-svg-HCiVzkgu8ZexoO9L .node ellipse,#mermaid-svg-HCiVzkgu8ZexoO9L .node polygon,#mermaid-svg-HCiVzkgu8ZexoO9L .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-HCiVzkgu8ZexoO9L .node .label{text-align:center;fill:#333}#mermaid-svg-HCiVzkgu8ZexoO9L .node.clickable{cursor:pointer}#mermaid-svg-HCiVzkgu8ZexoO9L .arrowheadPath{fill:#333}#mermaid-svg-HCiVzkgu8ZexoO9L .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-HCiVzkgu8ZexoO9L .flowchart-link{stroke:#333;fill:none}#mermaid-svg-HCiVzkgu8ZexoO9L .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-HCiVzkgu8ZexoO9L .edgeLabel rect{opacity:0.9}#mermaid-svg-HCiVzkgu8ZexoO9L .edgeLabel span{color:#333}#mermaid-svg-HCiVzkgu8ZexoO9L .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-HCiVzkgu8ZexoO9L .cluster text{fill:#333}#mermaid-svg-HCiVzkgu8ZexoO9L div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-HCiVzkgu8ZexoO9L .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-HCiVzkgu8ZexoO9L text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-HCiVzkgu8ZexoO9L .actor-line{stroke:grey}#mermaid-svg-HCiVzkgu8ZexoO9L .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-HCiVzkgu8ZexoO9L .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-HCiVzkgu8ZexoO9L #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-HCiVzkgu8ZexoO9L .sequenceNumber{fill:#fff}#mermaid-svg-HCiVzkgu8ZexoO9L #sequencenumber{fill:#333}#mermaid-svg-HCiVzkgu8ZexoO9L #crosshead path{fill:#333;stroke:#333}#mermaid-svg-HCiVzkgu8ZexoO9L .messageText{fill:#333;stroke:#333}#mermaid-svg-HCiVzkgu8ZexoO9L .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-HCiVzkgu8ZexoO9L .labelText,#mermaid-svg-HCiVzkgu8ZexoO9L .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-HCiVzkgu8ZexoO9L .loopText,#mermaid-svg-HCiVzkgu8ZexoO9L .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-HCiVzkgu8ZexoO9L .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-HCiVzkgu8ZexoO9L .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-HCiVzkgu8ZexoO9L .noteText,#mermaid-svg-HCiVzkgu8ZexoO9L .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-HCiVzkgu8ZexoO9L .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-HCiVzkgu8ZexoO9L .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-HCiVzkgu8ZexoO9L .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-HCiVzkgu8ZexoO9L .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-HCiVzkgu8ZexoO9L .section{stroke:none;opacity:0.2}#mermaid-svg-HCiVzkgu8ZexoO9L .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-HCiVzkgu8ZexoO9L .section2{fill:#fff400}#mermaid-svg-HCiVzkgu8ZexoO9L .section1,#mermaid-svg-HCiVzkgu8ZexoO9L .section3{fill:#fff;opacity:0.2}#mermaid-svg-HCiVzkgu8ZexoO9L .sectionTitle0{fill:#333}#mermaid-svg-HCiVzkgu8ZexoO9L .sectionTitle1{fill:#333}#mermaid-svg-HCiVzkgu8ZexoO9L .sectionTitle2{fill:#333}#mermaid-svg-HCiVzkgu8ZexoO9L .sectionTitle3{fill:#333}#mermaid-svg-HCiVzkgu8ZexoO9L .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-HCiVzkgu8ZexoO9L .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-HCiVzkgu8ZexoO9L .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-HCiVzkgu8ZexoO9L .grid path{stroke-width:0}#mermaid-svg-HCiVzkgu8ZexoO9L .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-HCiVzkgu8ZexoO9L .task{stroke-width:2}#mermaid-svg-HCiVzkgu8ZexoO9L .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-HCiVzkgu8ZexoO9L .taskText:not([font-size]){font-size:11px}#mermaid-svg-HCiVzkgu8ZexoO9L .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-HCiVzkgu8ZexoO9L .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-HCiVzkgu8ZexoO9L .task.clickable{cursor:pointer}#mermaid-svg-HCiVzkgu8ZexoO9L .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-HCiVzkgu8ZexoO9L .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-HCiVzkgu8ZexoO9L .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-HCiVzkgu8ZexoO9L .taskText0,#mermaid-svg-HCiVzkgu8ZexoO9L .taskText1,#mermaid-svg-HCiVzkgu8ZexoO9L .taskText2,#mermaid-svg-HCiVzkgu8ZexoO9L .taskText3{fill:#fff}#mermaid-svg-HCiVzkgu8ZexoO9L .task0,#mermaid-svg-HCiVzkgu8ZexoO9L .task1,#mermaid-svg-HCiVzkgu8ZexoO9L .task2,#mermaid-svg-HCiVzkgu8ZexoO9L .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-HCiVzkgu8ZexoO9L .taskTextOutside0,#mermaid-svg-HCiVzkgu8ZexoO9L .taskTextOutside2{fill:#000}#mermaid-svg-HCiVzkgu8ZexoO9L .taskTextOutside1,#mermaid-svg-HCiVzkgu8ZexoO9L .taskTextOutside3{fill:#000}#mermaid-svg-HCiVzkgu8ZexoO9L .active0,#mermaid-svg-HCiVzkgu8ZexoO9L .active1,#mermaid-svg-HCiVzkgu8ZexoO9L .active2,#mermaid-svg-HCiVzkgu8ZexoO9L .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-HCiVzkgu8ZexoO9L .activeText0,#mermaid-svg-HCiVzkgu8ZexoO9L .activeText1,#mermaid-svg-HCiVzkgu8ZexoO9L .activeText2,#mermaid-svg-HCiVzkgu8ZexoO9L .activeText3{fill:#000 !important}#mermaid-svg-HCiVzkgu8ZexoO9L .done0,#mermaid-svg-HCiVzkgu8ZexoO9L .done1,#mermaid-svg-HCiVzkgu8ZexoO9L .done2,#mermaid-svg-HCiVzkgu8ZexoO9L .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-HCiVzkgu8ZexoO9L .doneText0,#mermaid-svg-HCiVzkgu8ZexoO9L .doneText1,#mermaid-svg-HCiVzkgu8ZexoO9L .doneText2,#mermaid-svg-HCiVzkgu8ZexoO9L .doneText3{fill:#000 !important}#mermaid-svg-HCiVzkgu8ZexoO9L .crit0,#mermaid-svg-HCiVzkgu8ZexoO9L .crit1,#mermaid-svg-HCiVzkgu8ZexoO9L .crit2,#mermaid-svg-HCiVzkgu8ZexoO9L .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-HCiVzkgu8ZexoO9L .activeCrit0,#mermaid-svg-HCiVzkgu8ZexoO9L .activeCrit1,#mermaid-svg-HCiVzkgu8ZexoO9L .activeCrit2,#mermaid-svg-HCiVzkgu8ZexoO9L .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-HCiVzkgu8ZexoO9L .doneCrit0,#mermaid-svg-HCiVzkgu8ZexoO9L .doneCrit1,#mermaid-svg-HCiVzkgu8ZexoO9L .doneCrit2,#mermaid-svg-HCiVzkgu8ZexoO9L .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-HCiVzkgu8ZexoO9L .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-HCiVzkgu8ZexoO9L .milestoneText{font-style:italic}#mermaid-svg-HCiVzkgu8ZexoO9L .doneCritText0,#mermaid-svg-HCiVzkgu8ZexoO9L .doneCritText1,#mermaid-svg-HCiVzkgu8ZexoO9L .doneCritText2,#mermaid-svg-HCiVzkgu8ZexoO9L .doneCritText3{fill:#000 !important}#mermaid-svg-HCiVzkgu8ZexoO9L .activeCritText0,#mermaid-svg-HCiVzkgu8ZexoO9L .activeCritText1,#mermaid-svg-HCiVzkgu8ZexoO9L .activeCritText2,#mermaid-svg-HCiVzkgu8ZexoO9L .activeCritText3{fill:#000 !important}#mermaid-svg-HCiVzkgu8ZexoO9L .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-HCiVzkgu8ZexoO9L g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-HCiVzkgu8ZexoO9L g.classGroup text .title{font-weight:bolder}#mermaid-svg-HCiVzkgu8ZexoO9L g.clickable{cursor:pointer}#mermaid-svg-HCiVzkgu8ZexoO9L g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-HCiVzkgu8ZexoO9L g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-HCiVzkgu8ZexoO9L .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-HCiVzkgu8ZexoO9L .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-HCiVzkgu8ZexoO9L .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-HCiVzkgu8ZexoO9L .dashed-line{stroke-dasharray:3}#mermaid-svg-HCiVzkgu8ZexoO9L #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-HCiVzkgu8ZexoO9L #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-HCiVzkgu8ZexoO9L #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-HCiVzkgu8ZexoO9L #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-HCiVzkgu8ZexoO9L #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-HCiVzkgu8ZexoO9L #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-HCiVzkgu8ZexoO9L #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-HCiVzkgu8ZexoO9L #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-HCiVzkgu8ZexoO9L .commit-id,#mermaid-svg-HCiVzkgu8ZexoO9L .commit-msg,#mermaid-svg-HCiVzkgu8ZexoO9L .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-HCiVzkgu8ZexoO9L .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-HCiVzkgu8ZexoO9L .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-HCiVzkgu8ZexoO9L g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-HCiVzkgu8ZexoO9L g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-HCiVzkgu8ZexoO9L g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-HCiVzkgu8ZexoO9L g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-HCiVzkgu8ZexoO9L g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-HCiVzkgu8ZexoO9L g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-HCiVzkgu8ZexoO9L .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-HCiVzkgu8ZexoO9L .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-HCiVzkgu8ZexoO9L .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-HCiVzkgu8ZexoO9L .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-HCiVzkgu8ZexoO9L .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-HCiVzkgu8ZexoO9L .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-HCiVzkgu8ZexoO9L .edgeLabel text{fill:#333}#mermaid-svg-HCiVzkgu8ZexoO9L .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-HCiVzkgu8ZexoO9L .node circle.state-start{fill:black;stroke:black}#mermaid-svg-HCiVzkgu8ZexoO9L .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-HCiVzkgu8ZexoO9L #statediagram-barbEnd{fill:#9370db}#mermaid-svg-HCiVzkgu8ZexoO9L .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-HCiVzkgu8ZexoO9L .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-HCiVzkgu8ZexoO9L .statediagram-state .divider{stroke:#9370db}#mermaid-svg-HCiVzkgu8ZexoO9L .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-HCiVzkgu8ZexoO9L .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-HCiVzkgu8ZexoO9L .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-HCiVzkgu8ZexoO9L .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-HCiVzkgu8ZexoO9L .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-HCiVzkgu8ZexoO9L .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-HCiVzkgu8ZexoO9L .note-edge{stroke-dasharray:5}#mermaid-svg-HCiVzkgu8ZexoO9L .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-HCiVzkgu8ZexoO9L .error-icon{fill:#522}#mermaid-svg-HCiVzkgu8ZexoO9L .error-text{fill:#522;stroke:#522}#mermaid-svg-HCiVzkgu8ZexoO9L .edge-thickness-normal{stroke-width:2px}#mermaid-svg-HCiVzkgu8ZexoO9L .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-HCiVzkgu8ZexoO9L .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-HCiVzkgu8ZexoO9L .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-HCiVzkgu8ZexoO9L .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-HCiVzkgu8ZexoO9L .marker{fill:#333}#mermaid-svg-HCiVzkgu8ZexoO9L .marker.cross{stroke:#333}:root { --mermaid-font-family: "trebuchet ms", verdana, arial;}#mermaid-svg-HCiVzkgu8ZexoO9L {color: rgba(0, 0, 0, 0.75);font: ;}明文對(duì)合變換1對(duì)合變換2對(duì)合變換1對(duì)合變換2對(duì)合變換1密文 #mermaid-svg-zeJJmtNEVNQRIAuh .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-zeJJmtNEVNQRIAuh .label text{fill:#333}#mermaid-svg-zeJJmtNEVNQRIAuh .node rect,#mermaid-svg-zeJJmtNEVNQRIAuh .node circle,#mermaid-svg-zeJJmtNEVNQRIAuh .node ellipse,#mermaid-svg-zeJJmtNEVNQRIAuh .node polygon,#mermaid-svg-zeJJmtNEVNQRIAuh .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-zeJJmtNEVNQRIAuh .node .label{text-align:center;fill:#333}#mermaid-svg-zeJJmtNEVNQRIAuh .node.clickable{cursor:pointer}#mermaid-svg-zeJJmtNEVNQRIAuh .arrowheadPath{fill:#333}#mermaid-svg-zeJJmtNEVNQRIAuh .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-zeJJmtNEVNQRIAuh .flowchart-link{stroke:#333;fill:none}#mermaid-svg-zeJJmtNEVNQRIAuh .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-zeJJmtNEVNQRIAuh .edgeLabel rect{opacity:0.9}#mermaid-svg-zeJJmtNEVNQRIAuh .edgeLabel span{color:#333}#mermaid-svg-zeJJmtNEVNQRIAuh .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-zeJJmtNEVNQRIAuh .cluster text{fill:#333}#mermaid-svg-zeJJmtNEVNQRIAuh div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-zeJJmtNEVNQRIAuh .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-zeJJmtNEVNQRIAuh text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-zeJJmtNEVNQRIAuh .actor-line{stroke:grey}#mermaid-svg-zeJJmtNEVNQRIAuh .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-zeJJmtNEVNQRIAuh .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-zeJJmtNEVNQRIAuh #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-zeJJmtNEVNQRIAuh .sequenceNumber{fill:#fff}#mermaid-svg-zeJJmtNEVNQRIAuh #sequencenumber{fill:#333}#mermaid-svg-zeJJmtNEVNQRIAuh #crosshead path{fill:#333;stroke:#333}#mermaid-svg-zeJJmtNEVNQRIAuh .messageText{fill:#333;stroke:#333}#mermaid-svg-zeJJmtNEVNQRIAuh .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-zeJJmtNEVNQRIAuh .labelText,#mermaid-svg-zeJJmtNEVNQRIAuh .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-zeJJmtNEVNQRIAuh .loopText,#mermaid-svg-zeJJmtNEVNQRIAuh .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-zeJJmtNEVNQRIAuh .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-zeJJmtNEVNQRIAuh .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-zeJJmtNEVNQRIAuh .noteText,#mermaid-svg-zeJJmtNEVNQRIAuh .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-zeJJmtNEVNQRIAuh .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-zeJJmtNEVNQRIAuh .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-zeJJmtNEVNQRIAuh .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-zeJJmtNEVNQRIAuh .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-zeJJmtNEVNQRIAuh .section{stroke:none;opacity:0.2}#mermaid-svg-zeJJmtNEVNQRIAuh .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-zeJJmtNEVNQRIAuh .section2{fill:#fff400}#mermaid-svg-zeJJmtNEVNQRIAuh .section1,#mermaid-svg-zeJJmtNEVNQRIAuh .section3{fill:#fff;opacity:0.2}#mermaid-svg-zeJJmtNEVNQRIAuh .sectionTitle0{fill:#333}#mermaid-svg-zeJJmtNEVNQRIAuh .sectionTitle1{fill:#333}#mermaid-svg-zeJJmtNEVNQRIAuh .sectionTitle2{fill:#333}#mermaid-svg-zeJJmtNEVNQRIAuh .sectionTitle3{fill:#333}#mermaid-svg-zeJJmtNEVNQRIAuh .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-zeJJmtNEVNQRIAuh .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-zeJJmtNEVNQRIAuh .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-zeJJmtNEVNQRIAuh .grid path{stroke-width:0}#mermaid-svg-zeJJmtNEVNQRIAuh .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-zeJJmtNEVNQRIAuh .task{stroke-width:2}#mermaid-svg-zeJJmtNEVNQRIAuh .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-zeJJmtNEVNQRIAuh .taskText:not([font-size]){font-size:11px}#mermaid-svg-zeJJmtNEVNQRIAuh .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-zeJJmtNEVNQRIAuh .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-zeJJmtNEVNQRIAuh .task.clickable{cursor:pointer}#mermaid-svg-zeJJmtNEVNQRIAuh .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-zeJJmtNEVNQRIAuh .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-zeJJmtNEVNQRIAuh .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-zeJJmtNEVNQRIAuh .taskText0,#mermaid-svg-zeJJmtNEVNQRIAuh .taskText1,#mermaid-svg-zeJJmtNEVNQRIAuh .taskText2,#mermaid-svg-zeJJmtNEVNQRIAuh .taskText3{fill:#fff}#mermaid-svg-zeJJmtNEVNQRIAuh .task0,#mermaid-svg-zeJJmtNEVNQRIAuh .task1,#mermaid-svg-zeJJmtNEVNQRIAuh .task2,#mermaid-svg-zeJJmtNEVNQRIAuh .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-zeJJmtNEVNQRIAuh .taskTextOutside0,#mermaid-svg-zeJJmtNEVNQRIAuh .taskTextOutside2{fill:#000}#mermaid-svg-zeJJmtNEVNQRIAuh .taskTextOutside1,#mermaid-svg-zeJJmtNEVNQRIAuh .taskTextOutside3{fill:#000}#mermaid-svg-zeJJmtNEVNQRIAuh .active0,#mermaid-svg-zeJJmtNEVNQRIAuh .active1,#mermaid-svg-zeJJmtNEVNQRIAuh .active2,#mermaid-svg-zeJJmtNEVNQRIAuh .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-zeJJmtNEVNQRIAuh .activeText0,#mermaid-svg-zeJJmtNEVNQRIAuh .activeText1,#mermaid-svg-zeJJmtNEVNQRIAuh .activeText2,#mermaid-svg-zeJJmtNEVNQRIAuh .activeText3{fill:#000 !important}#mermaid-svg-zeJJmtNEVNQRIAuh .done0,#mermaid-svg-zeJJmtNEVNQRIAuh .done1,#mermaid-svg-zeJJmtNEVNQRIAuh .done2,#mermaid-svg-zeJJmtNEVNQRIAuh .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-zeJJmtNEVNQRIAuh .doneText0,#mermaid-svg-zeJJmtNEVNQRIAuh .doneText1,#mermaid-svg-zeJJmtNEVNQRIAuh .doneText2,#mermaid-svg-zeJJmtNEVNQRIAuh .doneText3{fill:#000 !important}#mermaid-svg-zeJJmtNEVNQRIAuh .crit0,#mermaid-svg-zeJJmtNEVNQRIAuh .crit1,#mermaid-svg-zeJJmtNEVNQRIAuh .crit2,#mermaid-svg-zeJJmtNEVNQRIAuh .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-zeJJmtNEVNQRIAuh .activeCrit0,#mermaid-svg-zeJJmtNEVNQRIAuh .activeCrit1,#mermaid-svg-zeJJmtNEVNQRIAuh .activeCrit2,#mermaid-svg-zeJJmtNEVNQRIAuh .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-zeJJmtNEVNQRIAuh .doneCrit0,#mermaid-svg-zeJJmtNEVNQRIAuh .doneCrit1,#mermaid-svg-zeJJmtNEVNQRIAuh .doneCrit2,#mermaid-svg-zeJJmtNEVNQRIAuh .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-zeJJmtNEVNQRIAuh .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-zeJJmtNEVNQRIAuh .milestoneText{font-style:italic}#mermaid-svg-zeJJmtNEVNQRIAuh .doneCritText0,#mermaid-svg-zeJJmtNEVNQRIAuh .doneCritText1,#mermaid-svg-zeJJmtNEVNQRIAuh .doneCritText2,#mermaid-svg-zeJJmtNEVNQRIAuh .doneCritText3{fill:#000 !important}#mermaid-svg-zeJJmtNEVNQRIAuh .activeCritText0,#mermaid-svg-zeJJmtNEVNQRIAuh .activeCritText1,#mermaid-svg-zeJJmtNEVNQRIAuh .activeCritText2,#mermaid-svg-zeJJmtNEVNQRIAuh .activeCritText3{fill:#000 !important}#mermaid-svg-zeJJmtNEVNQRIAuh .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-zeJJmtNEVNQRIAuh g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-zeJJmtNEVNQRIAuh g.classGroup text .title{font-weight:bolder}#mermaid-svg-zeJJmtNEVNQRIAuh g.clickable{cursor:pointer}#mermaid-svg-zeJJmtNEVNQRIAuh g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-zeJJmtNEVNQRIAuh g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-zeJJmtNEVNQRIAuh .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-zeJJmtNEVNQRIAuh .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-zeJJmtNEVNQRIAuh .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-zeJJmtNEVNQRIAuh .dashed-line{stroke-dasharray:3}#mermaid-svg-zeJJmtNEVNQRIAuh #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-zeJJmtNEVNQRIAuh #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-zeJJmtNEVNQRIAuh #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-zeJJmtNEVNQRIAuh #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-zeJJmtNEVNQRIAuh #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-zeJJmtNEVNQRIAuh #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-zeJJmtNEVNQRIAuh #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-zeJJmtNEVNQRIAuh #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-zeJJmtNEVNQRIAuh .commit-id,#mermaid-svg-zeJJmtNEVNQRIAuh .commit-msg,#mermaid-svg-zeJJmtNEVNQRIAuh .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-zeJJmtNEVNQRIAuh .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-zeJJmtNEVNQRIAuh .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-zeJJmtNEVNQRIAuh g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-zeJJmtNEVNQRIAuh g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-zeJJmtNEVNQRIAuh g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-zeJJmtNEVNQRIAuh g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-zeJJmtNEVNQRIAuh g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-zeJJmtNEVNQRIAuh g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-zeJJmtNEVNQRIAuh .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-zeJJmtNEVNQRIAuh .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-zeJJmtNEVNQRIAuh .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-zeJJmtNEVNQRIAuh .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-zeJJmtNEVNQRIAuh .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-zeJJmtNEVNQRIAuh .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-zeJJmtNEVNQRIAuh .edgeLabel text{fill:#333}#mermaid-svg-zeJJmtNEVNQRIAuh .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-zeJJmtNEVNQRIAuh .node circle.state-start{fill:black;stroke:black}#mermaid-svg-zeJJmtNEVNQRIAuh .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-zeJJmtNEVNQRIAuh #statediagram-barbEnd{fill:#9370db}#mermaid-svg-zeJJmtNEVNQRIAuh .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-zeJJmtNEVNQRIAuh .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-zeJJmtNEVNQRIAuh .statediagram-state .divider{stroke:#9370db}#mermaid-svg-zeJJmtNEVNQRIAuh .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-zeJJmtNEVNQRIAuh .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-zeJJmtNEVNQRIAuh .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-zeJJmtNEVNQRIAuh .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-zeJJmtNEVNQRIAuh .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-zeJJmtNEVNQRIAuh .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-zeJJmtNEVNQRIAuh .note-edge{stroke-dasharray:5}#mermaid-svg-zeJJmtNEVNQRIAuh .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-zeJJmtNEVNQRIAuh .error-icon{fill:#522}#mermaid-svg-zeJJmtNEVNQRIAuh .error-text{fill:#522;stroke:#522}#mermaid-svg-zeJJmtNEVNQRIAuh .edge-thickness-normal{stroke-width:2px}#mermaid-svg-zeJJmtNEVNQRIAuh .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-zeJJmtNEVNQRIAuh .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-zeJJmtNEVNQRIAuh .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-zeJJmtNEVNQRIAuh .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-zeJJmtNEVNQRIAuh .marker{fill:#333}#mermaid-svg-zeJJmtNEVNQRIAuh .marker.cross{stroke:#333}:root { --mermaid-font-family: "trebuchet ms", verdana, arial;}#mermaid-svg-zeJJmtNEVNQRIAuh {color: rgba(0, 0, 0, 0.75);font: ;}密文對(duì)合變換1對(duì)合變換2對(duì)合變換1對(duì)合變換2對(duì)合變換1明文可知,將C解密為M的過程為M加密為C的逆過程\color{gray}可知,將C解密為M的過程為M加密為C的逆過程可知,將C解密為M的過程為M加密為C的逆過程
將此3圈擴(kuò)展為16圈即為DES的脫密過程\color{blue}將此3圈擴(kuò)展為16圈即為DES的脫密過程將此3圈擴(kuò)展為16圈即為DES的脫密過程
總結(jié)
最后附帶一張手繪總結(jié)圖\color{red}最后附帶一張手繪總結(jié)圖最后附帶一張手繪總結(jié)圖
總結(jié)
以上是生活随笔為你收集整理的信息安全密码学:DES算法的核心 E盒、S盒、P盒的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android8.0 USB系统框架
- 下一篇: C语言操作符详解