SM4国密算法整理–流程图

前一篇文章没有加入流程图,自己看着也有点晕,现在再次整理下

python代码看我之前的文章: 请点击.


加密

计算轮秘钥

#mermaid-svg-LmTcVIQC7cArl1s2 .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-LmTcVIQC7cArl1s2 .label text{fill:#333}#mermaid-svg-LmTcVIQC7cArl1s2 .node rect,#mermaid-svg-LmTcVIQC7cArl1s2 .node circle,#mermaid-svg-LmTcVIQC7cArl1s2 .node ellipse,#mermaid-svg-LmTcVIQC7cArl1s2 .node polygon,#mermaid-svg-LmTcVIQC7cArl1s2 .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-LmTcVIQC7cArl1s2 .node .label{text-align:center;fill:#333}#mermaid-svg-LmTcVIQC7cArl1s2 .node.clickable{cursor:pointer}#mermaid-svg-LmTcVIQC7cArl1s2 .arrowheadPath{fill:#333}#mermaid-svg-LmTcVIQC7cArl1s2 .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-LmTcVIQC7cArl1s2 .flowchart-link{stroke:#333;fill:none}#mermaid-svg-LmTcVIQC7cArl1s2 .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-LmTcVIQC7cArl1s2 .edgeLabel rect{opacity:0.9}#mermaid-svg-LmTcVIQC7cArl1s2 .edgeLabel span{color:#333}#mermaid-svg-LmTcVIQC7cArl1s2 .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-LmTcVIQC7cArl1s2 .cluster text{fill:#333}#mermaid-svg-LmTcVIQC7cArl1s2 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-LmTcVIQC7cArl1s2 .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-LmTcVIQC7cArl1s2 text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-LmTcVIQC7cArl1s2 .actor-line{stroke:grey}#mermaid-svg-LmTcVIQC7cArl1s2 .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-LmTcVIQC7cArl1s2 .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-LmTcVIQC7cArl1s2 #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-LmTcVIQC7cArl1s2 .sequenceNumber{fill:#fff}#mermaid-svg-LmTcVIQC7cArl1s2 #sequencenumber{fill:#333}#mermaid-svg-LmTcVIQC7cArl1s2 #crosshead path{fill:#333;stroke:#333}#mermaid-svg-LmTcVIQC7cArl1s2 .messageText{fill:#333;stroke:#333}#mermaid-svg-LmTcVIQC7cArl1s2 .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-LmTcVIQC7cArl1s2 .labelText,#mermaid-svg-LmTcVIQC7cArl1s2 .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-LmTcVIQC7cArl1s2 .loopText,#mermaid-svg-LmTcVIQC7cArl1s2 .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-LmTcVIQC7cArl1s2 .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-LmTcVIQC7cArl1s2 .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-LmTcVIQC7cArl1s2 .noteText,#mermaid-svg-LmTcVIQC7cArl1s2 .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-LmTcVIQC7cArl1s2 .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-LmTcVIQC7cArl1s2 .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-LmTcVIQC7cArl1s2 .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-LmTcVIQC7cArl1s2 .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-LmTcVIQC7cArl1s2 .section{stroke:none;opacity:0.2}#mermaid-svg-LmTcVIQC7cArl1s2 .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-LmTcVIQC7cArl1s2 .section2{fill:#fff400}#mermaid-svg-LmTcVIQC7cArl1s2 .section1,#mermaid-svg-LmTcVIQC7cArl1s2 .section3{fill:#fff;opacity:0.2}#mermaid-svg-LmTcVIQC7cArl1s2 .sectionTitle0{fill:#333}#mermaid-svg-LmTcVIQC7cArl1s2 .sectionTitle1{fill:#333}#mermaid-svg-LmTcVIQC7cArl1s2 .sectionTitle2{fill:#333}#mermaid-svg-LmTcVIQC7cArl1s2 .sectionTitle3{fill:#333}#mermaid-svg-LmTcVIQC7cArl1s2 .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-LmTcVIQC7cArl1s2 .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-LmTcVIQC7cArl1s2 .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-LmTcVIQC7cArl1s2 .grid path{stroke-width:0}#mermaid-svg-LmTcVIQC7cArl1s2 .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-LmTcVIQC7cArl1s2 .task{stroke-width:2}#mermaid-svg-LmTcVIQC7cArl1s2 .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-LmTcVIQC7cArl1s2 .taskText:not([font-size]){font-size:11px}#mermaid-svg-LmTcVIQC7cArl1s2 .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-LmTcVIQC7cArl1s2 .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-LmTcVIQC7cArl1s2 .task.clickable{cursor:pointer}#mermaid-svg-LmTcVIQC7cArl1s2 .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-LmTcVIQC7cArl1s2 .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-LmTcVIQC7cArl1s2 .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-LmTcVIQC7cArl1s2 .taskText0,#mermaid-svg-LmTcVIQC7cArl1s2 .taskText1,#mermaid-svg-LmTcVIQC7cArl1s2 .taskText2,#mermaid-svg-LmTcVIQC7cArl1s2 .taskText3{fill:#fff}#mermaid-svg-LmTcVIQC7cArl1s2 .task0,#mermaid-svg-LmTcVIQC7cArl1s2 .task1,#mermaid-svg-LmTcVIQC7cArl1s2 .task2,#mermaid-svg-LmTcVIQC7cArl1s2 .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-LmTcVIQC7cArl1s2 .taskTextOutside0,#mermaid-svg-LmTcVIQC7cArl1s2 .taskTextOutside2{fill:#000}#mermaid-svg-LmTcVIQC7cArl1s2 .taskTextOutside1,#mermaid-svg-LmTcVIQC7cArl1s2 .taskTextOutside3{fill:#000}#mermaid-svg-LmTcVIQC7cArl1s2 .active0,#mermaid-svg-LmTcVIQC7cArl1s2 .active1,#mermaid-svg-LmTcVIQC7cArl1s2 .active2,#mermaid-svg-LmTcVIQC7cArl1s2 .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-LmTcVIQC7cArl1s2 .activeText0,#mermaid-svg-LmTcVIQC7cArl1s2 .activeText1,#mermaid-svg-LmTcVIQC7cArl1s2 .activeText2,#mermaid-svg-LmTcVIQC7cArl1s2 .activeText3{fill:#000 !important}#mermaid-svg-LmTcVIQC7cArl1s2 .done0,#mermaid-svg-LmTcVIQC7cArl1s2 .done1,#mermaid-svg-LmTcVIQC7cArl1s2 .done2,#mermaid-svg-LmTcVIQC7cArl1s2 .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-LmTcVIQC7cArl1s2 .doneText0,#mermaid-svg-LmTcVIQC7cArl1s2 .doneText1,#mermaid-svg-LmTcVIQC7cArl1s2 .doneText2,#mermaid-svg-LmTcVIQC7cArl1s2 .doneText3{fill:#000 !important}#mermaid-svg-LmTcVIQC7cArl1s2 .crit0,#mermaid-svg-LmTcVIQC7cArl1s2 .crit1,#mermaid-svg-LmTcVIQC7cArl1s2 .crit2,#mermaid-svg-LmTcVIQC7cArl1s2 .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-LmTcVIQC7cArl1s2 .activeCrit0,#mermaid-svg-LmTcVIQC7cArl1s2 .activeCrit1,#mermaid-svg-LmTcVIQC7cArl1s2 .activeCrit2,#mermaid-svg-LmTcVIQC7cArl1s2 .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-LmTcVIQC7cArl1s2 .doneCrit0,#mermaid-svg-LmTcVIQC7cArl1s2 .doneCrit1,#mermaid-svg-LmTcVIQC7cArl1s2 .doneCrit2,#mermaid-svg-LmTcVIQC7cArl1s2 .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-LmTcVIQC7cArl1s2 .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-LmTcVIQC7cArl1s2 .milestoneText{font-style:italic}#mermaid-svg-LmTcVIQC7cArl1s2 .doneCritText0,#mermaid-svg-LmTcVIQC7cArl1s2 .doneCritText1,#mermaid-svg-LmTcVIQC7cArl1s2 .doneCritText2,#mermaid-svg-LmTcVIQC7cArl1s2 .doneCritText3{fill:#000 !important}#mermaid-svg-LmTcVIQC7cArl1s2 .activeCritText0,#mermaid-svg-LmTcVIQC7cArl1s2 .activeCritText1,#mermaid-svg-LmTcVIQC7cArl1s2 .activeCritText2,#mermaid-svg-LmTcVIQC7cArl1s2 .activeCritText3{fill:#000 !important}#mermaid-svg-LmTcVIQC7cArl1s2 .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-LmTcVIQC7cArl1s2 g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-LmTcVIQC7cArl1s2 g.classGroup text .title{font-weight:bolder}#mermaid-svg-LmTcVIQC7cArl1s2 g.clickable{cursor:pointer}#mermaid-svg-LmTcVIQC7cArl1s2 g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-LmTcVIQC7cArl1s2 g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-LmTcVIQC7cArl1s2 .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-LmTcVIQC7cArl1s2 .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-LmTcVIQC7cArl1s2 .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-LmTcVIQC7cArl1s2 .dashed-line{stroke-dasharray:3}#mermaid-svg-LmTcVIQC7cArl1s2 #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-LmTcVIQC7cArl1s2 #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-LmTcVIQC7cArl1s2 #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-LmTcVIQC7cArl1s2 #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-LmTcVIQC7cArl1s2 #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-LmTcVIQC7cArl1s2 #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-LmTcVIQC7cArl1s2 #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-LmTcVIQC7cArl1s2 #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-LmTcVIQC7cArl1s2 .commit-id,#mermaid-svg-LmTcVIQC7cArl1s2 .commit-msg,#mermaid-svg-LmTcVIQC7cArl1s2 .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-LmTcVIQC7cArl1s2 .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-LmTcVIQC7cArl1s2 .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-LmTcVIQC7cArl1s2 g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-LmTcVIQC7cArl1s2 g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-LmTcVIQC7cArl1s2 g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-LmTcVIQC7cArl1s2 g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-LmTcVIQC7cArl1s2 g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-LmTcVIQC7cArl1s2 g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-LmTcVIQC7cArl1s2 .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-LmTcVIQC7cArl1s2 .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-LmTcVIQC7cArl1s2 .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-LmTcVIQC7cArl1s2 .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-LmTcVIQC7cArl1s2 .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-LmTcVIQC7cArl1s2 .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-LmTcVIQC7cArl1s2 .edgeLabel text{fill:#333}#mermaid-svg-LmTcVIQC7cArl1s2 .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-LmTcVIQC7cArl1s2 .node circle.state-start{fill:black;stroke:black}#mermaid-svg-LmTcVIQC7cArl1s2 .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-LmTcVIQC7cArl1s2 #statediagram-barbEnd{fill:#9370db}#mermaid-svg-LmTcVIQC7cArl1s2 .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-LmTcVIQC7cArl1s2 .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-LmTcVIQC7cArl1s2 .statediagram-state .divider{stroke:#9370db}#mermaid-svg-LmTcVIQC7cArl1s2 .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-LmTcVIQC7cArl1s2 .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-LmTcVIQC7cArl1s2 .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-LmTcVIQC7cArl1s2 .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-LmTcVIQC7cArl1s2 .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-LmTcVIQC7cArl1s2 .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-LmTcVIQC7cArl1s2 .note-edge{stroke-dasharray:5}#mermaid-svg-LmTcVIQC7cArl1s2 .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-LmTcVIQC7cArl1s2 .error-icon{fill:#522}#mermaid-svg-LmTcVIQC7cArl1s2 .error-text{fill:#522;stroke:#522}#mermaid-svg-LmTcVIQC7cArl1s2 .edge-thickness-normal{stroke-width:2px}#mermaid-svg-LmTcVIQC7cArl1s2 .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-LmTcVIQC7cArl1s2 .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-LmTcVIQC7cArl1s2 .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-LmTcVIQC7cArl1s2 .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-LmTcVIQC7cArl1s2 .marker{fill:#333}#mermaid-svg-LmTcVIQC7cArl1s2 .marker.cross{stroke:#333}:root { --mermaid-font-family: "trebuchet ms", verdana, arial;}#mermaid-svg-LmTcVIQC7cArl1s2 {color: rgba(0, 0, 0, 0.75);font: ;}

i从0到3
i从0循环到31
开始
将128bit的秘钥分成4个32bit的数,MK0,MK1,MK2,MK3
MKi异或FKi, FKi为常数
Ki
得到K0 K1 K2 K3
Bi = Ki+1 异或 Ki+2 异或 Ki+3 异或 CKi, CKi为常数, 注意,i+1和i+2和i+3为K的角标
将Bi做S盒计算得到Ci,即查表计算
Ci 异或 Ci循环左移13 异或 Ci循环左移23 = Di
rki = Ki+4 = Ki 异或 Di,注意 i+4为K的角标
得到rk0...rk31

轮函数

#mermaid-svg-6pd71Kq79cvLRHV7 .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-6pd71Kq79cvLRHV7 .label text{fill:#333}#mermaid-svg-6pd71Kq79cvLRHV7 .node rect,#mermaid-svg-6pd71Kq79cvLRHV7 .node circle,#mermaid-svg-6pd71Kq79cvLRHV7 .node ellipse,#mermaid-svg-6pd71Kq79cvLRHV7 .node polygon,#mermaid-svg-6pd71Kq79cvLRHV7 .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-6pd71Kq79cvLRHV7 .node .label{text-align:center;fill:#333}#mermaid-svg-6pd71Kq79cvLRHV7 .node.clickable{cursor:pointer}#mermaid-svg-6pd71Kq79cvLRHV7 .arrowheadPath{fill:#333}#mermaid-svg-6pd71Kq79cvLRHV7 .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-6pd71Kq79cvLRHV7 .flowchart-link{stroke:#333;fill:none}#mermaid-svg-6pd71Kq79cvLRHV7 .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-6pd71Kq79cvLRHV7 .edgeLabel rect{opacity:0.9}#mermaid-svg-6pd71Kq79cvLRHV7 .edgeLabel span{color:#333}#mermaid-svg-6pd71Kq79cvLRHV7 .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-6pd71Kq79cvLRHV7 .cluster text{fill:#333}#mermaid-svg-6pd71Kq79cvLRHV7 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-6pd71Kq79cvLRHV7 .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-6pd71Kq79cvLRHV7 text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-6pd71Kq79cvLRHV7 .actor-line{stroke:grey}#mermaid-svg-6pd71Kq79cvLRHV7 .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-6pd71Kq79cvLRHV7 .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-6pd71Kq79cvLRHV7 #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-6pd71Kq79cvLRHV7 .sequenceNumber{fill:#fff}#mermaid-svg-6pd71Kq79cvLRHV7 #sequencenumber{fill:#333}#mermaid-svg-6pd71Kq79cvLRHV7 #crosshead path{fill:#333;stroke:#333}#mermaid-svg-6pd71Kq79cvLRHV7 .messageText{fill:#333;stroke:#333}#mermaid-svg-6pd71Kq79cvLRHV7 .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-6pd71Kq79cvLRHV7 .labelText,#mermaid-svg-6pd71Kq79cvLRHV7 .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-6pd71Kq79cvLRHV7 .loopText,#mermaid-svg-6pd71Kq79cvLRHV7 .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-6pd71Kq79cvLRHV7 .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-6pd71Kq79cvLRHV7 .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-6pd71Kq79cvLRHV7 .noteText,#mermaid-svg-6pd71Kq79cvLRHV7 .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-6pd71Kq79cvLRHV7 .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-6pd71Kq79cvLRHV7 .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-6pd71Kq79cvLRHV7 .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-6pd71Kq79cvLRHV7 .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-6pd71Kq79cvLRHV7 .section{stroke:none;opacity:0.2}#mermaid-svg-6pd71Kq79cvLRHV7 .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-6pd71Kq79cvLRHV7 .section2{fill:#fff400}#mermaid-svg-6pd71Kq79cvLRHV7 .section1,#mermaid-svg-6pd71Kq79cvLRHV7 .section3{fill:#fff;opacity:0.2}#mermaid-svg-6pd71Kq79cvLRHV7 .sectionTitle0{fill:#333}#mermaid-svg-6pd71Kq79cvLRHV7 .sectionTitle1{fill:#333}#mermaid-svg-6pd71Kq79cvLRHV7 .sectionTitle2{fill:#333}#mermaid-svg-6pd71Kq79cvLRHV7 .sectionTitle3{fill:#333}#mermaid-svg-6pd71Kq79cvLRHV7 .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-6pd71Kq79cvLRHV7 .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-6pd71Kq79cvLRHV7 .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-6pd71Kq79cvLRHV7 .grid path{stroke-width:0}#mermaid-svg-6pd71Kq79cvLRHV7 .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-6pd71Kq79cvLRHV7 .task{stroke-width:2}#mermaid-svg-6pd71Kq79cvLRHV7 .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-6pd71Kq79cvLRHV7 .taskText:not([font-size]){font-size:11px}#mermaid-svg-6pd71Kq79cvLRHV7 .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-6pd71Kq79cvLRHV7 .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-6pd71Kq79cvLRHV7 .task.clickable{cursor:pointer}#mermaid-svg-6pd71Kq79cvLRHV7 .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-6pd71Kq79cvLRHV7 .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-6pd71Kq79cvLRHV7 .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-6pd71Kq79cvLRHV7 .taskText0,#mermaid-svg-6pd71Kq79cvLRHV7 .taskText1,#mermaid-svg-6pd71Kq79cvLRHV7 .taskText2,#mermaid-svg-6pd71Kq79cvLRHV7 .taskText3{fill:#fff}#mermaid-svg-6pd71Kq79cvLRHV7 .task0,#mermaid-svg-6pd71Kq79cvLRHV7 .task1,#mermaid-svg-6pd71Kq79cvLRHV7 .task2,#mermaid-svg-6pd71Kq79cvLRHV7 .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-6pd71Kq79cvLRHV7 .taskTextOutside0,#mermaid-svg-6pd71Kq79cvLRHV7 .taskTextOutside2{fill:#000}#mermaid-svg-6pd71Kq79cvLRHV7 .taskTextOutside1,#mermaid-svg-6pd71Kq79cvLRHV7 .taskTextOutside3{fill:#000}#mermaid-svg-6pd71Kq79cvLRHV7 .active0,#mermaid-svg-6pd71Kq79cvLRHV7 .active1,#mermaid-svg-6pd71Kq79cvLRHV7 .active2,#mermaid-svg-6pd71Kq79cvLRHV7 .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-6pd71Kq79cvLRHV7 .activeText0,#mermaid-svg-6pd71Kq79cvLRHV7 .activeText1,#mermaid-svg-6pd71Kq79cvLRHV7 .activeText2,#mermaid-svg-6pd71Kq79cvLRHV7 .activeText3{fill:#000 !important}#mermaid-svg-6pd71Kq79cvLRHV7 .done0,#mermaid-svg-6pd71Kq79cvLRHV7 .done1,#mermaid-svg-6pd71Kq79cvLRHV7 .done2,#mermaid-svg-6pd71Kq79cvLRHV7 .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-6pd71Kq79cvLRHV7 .doneText0,#mermaid-svg-6pd71Kq79cvLRHV7 .doneText1,#mermaid-svg-6pd71Kq79cvLRHV7 .doneText2,#mermaid-svg-6pd71Kq79cvLRHV7 .doneText3{fill:#000 !important}#mermaid-svg-6pd71Kq79cvLRHV7 .crit0,#mermaid-svg-6pd71Kq79cvLRHV7 .crit1,#mermaid-svg-6pd71Kq79cvLRHV7 .crit2,#mermaid-svg-6pd71Kq79cvLRHV7 .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-6pd71Kq79cvLRHV7 .activeCrit0,#mermaid-svg-6pd71Kq79cvLRHV7 .activeCrit1,#mermaid-svg-6pd71Kq79cvLRHV7 .activeCrit2,#mermaid-svg-6pd71Kq79cvLRHV7 .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-6pd71Kq79cvLRHV7 .doneCrit0,#mermaid-svg-6pd71Kq79cvLRHV7 .doneCrit1,#mermaid-svg-6pd71Kq79cvLRHV7 .doneCrit2,#mermaid-svg-6pd71Kq79cvLRHV7 .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-6pd71Kq79cvLRHV7 .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-6pd71Kq79cvLRHV7 .milestoneText{font-style:italic}#mermaid-svg-6pd71Kq79cvLRHV7 .doneCritText0,#mermaid-svg-6pd71Kq79cvLRHV7 .doneCritText1,#mermaid-svg-6pd71Kq79cvLRHV7 .doneCritText2,#mermaid-svg-6pd71Kq79cvLRHV7 .doneCritText3{fill:#000 !important}#mermaid-svg-6pd71Kq79cvLRHV7 .activeCritText0,#mermaid-svg-6pd71Kq79cvLRHV7 .activeCritText1,#mermaid-svg-6pd71Kq79cvLRHV7 .activeCritText2,#mermaid-svg-6pd71Kq79cvLRHV7 .activeCritText3{fill:#000 !important}#mermaid-svg-6pd71Kq79cvLRHV7 .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-6pd71Kq79cvLRHV7 g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-6pd71Kq79cvLRHV7 g.classGroup text .title{font-weight:bolder}#mermaid-svg-6pd71Kq79cvLRHV7 g.clickable{cursor:pointer}#mermaid-svg-6pd71Kq79cvLRHV7 g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-6pd71Kq79cvLRHV7 g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-6pd71Kq79cvLRHV7 .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-6pd71Kq79cvLRHV7 .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-6pd71Kq79cvLRHV7 .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-6pd71Kq79cvLRHV7 .dashed-line{stroke-dasharray:3}#mermaid-svg-6pd71Kq79cvLRHV7 #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-6pd71Kq79cvLRHV7 #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-6pd71Kq79cvLRHV7 #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-6pd71Kq79cvLRHV7 #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-6pd71Kq79cvLRHV7 #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-6pd71Kq79cvLRHV7 #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-6pd71Kq79cvLRHV7 #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-6pd71Kq79cvLRHV7 #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-6pd71Kq79cvLRHV7 .commit-id,#mermaid-svg-6pd71Kq79cvLRHV7 .commit-msg,#mermaid-svg-6pd71Kq79cvLRHV7 .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-6pd71Kq79cvLRHV7 .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-6pd71Kq79cvLRHV7 .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-6pd71Kq79cvLRHV7 g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-6pd71Kq79cvLRHV7 g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-6pd71Kq79cvLRHV7 g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-6pd71Kq79cvLRHV7 g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-6pd71Kq79cvLRHV7 g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-6pd71Kq79cvLRHV7 g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-6pd71Kq79cvLRHV7 .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-6pd71Kq79cvLRHV7 .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-6pd71Kq79cvLRHV7 .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-6pd71Kq79cvLRHV7 .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-6pd71Kq79cvLRHV7 .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-6pd71Kq79cvLRHV7 .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-6pd71Kq79cvLRHV7 .edgeLabel text{fill:#333}#mermaid-svg-6pd71Kq79cvLRHV7 .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-6pd71Kq79cvLRHV7 .node circle.state-start{fill:black;stroke:black}#mermaid-svg-6pd71Kq79cvLRHV7 .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-6pd71Kq79cvLRHV7 #statediagram-barbEnd{fill:#9370db}#mermaid-svg-6pd71Kq79cvLRHV7 .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-6pd71Kq79cvLRHV7 .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-6pd71Kq79cvLRHV7 .statediagram-state .divider{stroke:#9370db}#mermaid-svg-6pd71Kq79cvLRHV7 .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-6pd71Kq79cvLRHV7 .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-6pd71Kq79cvLRHV7 .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-6pd71Kq79cvLRHV7 .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-6pd71Kq79cvLRHV7 .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-6pd71Kq79cvLRHV7 .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-6pd71Kq79cvLRHV7 .note-edge{stroke-dasharray:5}#mermaid-svg-6pd71Kq79cvLRHV7 .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-6pd71Kq79cvLRHV7 .error-icon{fill:#522}#mermaid-svg-6pd71Kq79cvLRHV7 .error-text{fill:#522;stroke:#522}#mermaid-svg-6pd71Kq79cvLRHV7 .edge-thickness-normal{stroke-width:2px}#mermaid-svg-6pd71Kq79cvLRHV7 .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-6pd71Kq79cvLRHV7 .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-6pd71Kq79cvLRHV7 .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-6pd71Kq79cvLRHV7 .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-6pd71Kq79cvLRHV7 .marker{fill:#333}#mermaid-svg-6pd71Kq79cvLRHV7 .marker.cross{stroke:#333}:root { --mermaid-font-family: "trebuchet ms", verdana, arial;}#mermaid-svg-6pd71Kq79cvLRHV7 {color: rgba(0, 0, 0, 0.75);font: ;}

i从0循环到31
开始
取待加密的数据4个32位的数据,X0,X1,X2,X3
Xi+1异或Xi+2异或Xi+3异或rki = Ai, 注意i+1,x+2,x+3为X的角标
Ai进行S盒计算得到Bi,即查表
Ci = Bi 异或 Bi循环左移2 异或 Bi循环左移10 异或 Bi循环左移18 异或 Bi循环左移24
Xi 异或 Ci = Xi+4, 注意i+4为X的角标
得到X4...X35
X35 X34 X33 X32 就是加密后的内容, 注意顺序不能变

解密

#mermaid-svg-446bUVdin28GIjPm .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-446bUVdin28GIjPm .label text{fill:#333}#mermaid-svg-446bUVdin28GIjPm .node rect,#mermaid-svg-446bUVdin28GIjPm .node circle,#mermaid-svg-446bUVdin28GIjPm .node ellipse,#mermaid-svg-446bUVdin28GIjPm .node polygon,#mermaid-svg-446bUVdin28GIjPm .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-446bUVdin28GIjPm .node .label{text-align:center;fill:#333}#mermaid-svg-446bUVdin28GIjPm .node.clickable{cursor:pointer}#mermaid-svg-446bUVdin28GIjPm .arrowheadPath{fill:#333}#mermaid-svg-446bUVdin28GIjPm .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-446bUVdin28GIjPm .flowchart-link{stroke:#333;fill:none}#mermaid-svg-446bUVdin28GIjPm .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-446bUVdin28GIjPm .edgeLabel rect{opacity:0.9}#mermaid-svg-446bUVdin28GIjPm .edgeLabel span{color:#333}#mermaid-svg-446bUVdin28GIjPm .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-446bUVdin28GIjPm .cluster text{fill:#333}#mermaid-svg-446bUVdin28GIjPm 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-446bUVdin28GIjPm .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-446bUVdin28GIjPm text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-446bUVdin28GIjPm .actor-line{stroke:grey}#mermaid-svg-446bUVdin28GIjPm .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-446bUVdin28GIjPm .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-446bUVdin28GIjPm #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-446bUVdin28GIjPm .sequenceNumber{fill:#fff}#mermaid-svg-446bUVdin28GIjPm #sequencenumber{fill:#333}#mermaid-svg-446bUVdin28GIjPm #crosshead path{fill:#333;stroke:#333}#mermaid-svg-446bUVdin28GIjPm .messageText{fill:#333;stroke:#333}#mermaid-svg-446bUVdin28GIjPm .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-446bUVdin28GIjPm .labelText,#mermaid-svg-446bUVdin28GIjPm .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-446bUVdin28GIjPm .loopText,#mermaid-svg-446bUVdin28GIjPm .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-446bUVdin28GIjPm .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-446bUVdin28GIjPm .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-446bUVdin28GIjPm .noteText,#mermaid-svg-446bUVdin28GIjPm .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-446bUVdin28GIjPm .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-446bUVdin28GIjPm .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-446bUVdin28GIjPm .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-446bUVdin28GIjPm .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-446bUVdin28GIjPm .section{stroke:none;opacity:0.2}#mermaid-svg-446bUVdin28GIjPm .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-446bUVdin28GIjPm .section2{fill:#fff400}#mermaid-svg-446bUVdin28GIjPm .section1,#mermaid-svg-446bUVdin28GIjPm .section3{fill:#fff;opacity:0.2}#mermaid-svg-446bUVdin28GIjPm .sectionTitle0{fill:#333}#mermaid-svg-446bUVdin28GIjPm .sectionTitle1{fill:#333}#mermaid-svg-446bUVdin28GIjPm .sectionTitle2{fill:#333}#mermaid-svg-446bUVdin28GIjPm .sectionTitle3{fill:#333}#mermaid-svg-446bUVdin28GIjPm .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-446bUVdin28GIjPm .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-446bUVdin28GIjPm .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-446bUVdin28GIjPm .grid path{stroke-width:0}#mermaid-svg-446bUVdin28GIjPm .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-446bUVdin28GIjPm .task{stroke-width:2}#mermaid-svg-446bUVdin28GIjPm .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-446bUVdin28GIjPm .taskText:not([font-size]){font-size:11px}#mermaid-svg-446bUVdin28GIjPm .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-446bUVdin28GIjPm .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-446bUVdin28GIjPm .task.clickable{cursor:pointer}#mermaid-svg-446bUVdin28GIjPm .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-446bUVdin28GIjPm .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-446bUVdin28GIjPm .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-446bUVdin28GIjPm .taskText0,#mermaid-svg-446bUVdin28GIjPm .taskText1,#mermaid-svg-446bUVdin28GIjPm .taskText2,#mermaid-svg-446bUVdin28GIjPm .taskText3{fill:#fff}#mermaid-svg-446bUVdin28GIjPm .task0,#mermaid-svg-446bUVdin28GIjPm .task1,#mermaid-svg-446bUVdin28GIjPm .task2,#mermaid-svg-446bUVdin28GIjPm .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-446bUVdin28GIjPm .taskTextOutside0,#mermaid-svg-446bUVdin28GIjPm .taskTextOutside2{fill:#000}#mermaid-svg-446bUVdin28GIjPm .taskTextOutside1,#mermaid-svg-446bUVdin28GIjPm .taskTextOutside3{fill:#000}#mermaid-svg-446bUVdin28GIjPm .active0,#mermaid-svg-446bUVdin28GIjPm .active1,#mermaid-svg-446bUVdin28GIjPm .active2,#mermaid-svg-446bUVdin28GIjPm .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-446bUVdin28GIjPm .activeText0,#mermaid-svg-446bUVdin28GIjPm .activeText1,#mermaid-svg-446bUVdin28GIjPm .activeText2,#mermaid-svg-446bUVdin28GIjPm .activeText3{fill:#000 !important}#mermaid-svg-446bUVdin28GIjPm .done0,#mermaid-svg-446bUVdin28GIjPm .done1,#mermaid-svg-446bUVdin28GIjPm .done2,#mermaid-svg-446bUVdin28GIjPm .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-446bUVdin28GIjPm .doneText0,#mermaid-svg-446bUVdin28GIjPm .doneText1,#mermaid-svg-446bUVdin28GIjPm .doneText2,#mermaid-svg-446bUVdin28GIjPm .doneText3{fill:#000 !important}#mermaid-svg-446bUVdin28GIjPm .crit0,#mermaid-svg-446bUVdin28GIjPm .crit1,#mermaid-svg-446bUVdin28GIjPm .crit2,#mermaid-svg-446bUVdin28GIjPm .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-446bUVdin28GIjPm .activeCrit0,#mermaid-svg-446bUVdin28GIjPm .activeCrit1,#mermaid-svg-446bUVdin28GIjPm .activeCrit2,#mermaid-svg-446bUVdin28GIjPm .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-446bUVdin28GIjPm .doneCrit0,#mermaid-svg-446bUVdin28GIjPm .doneCrit1,#mermaid-svg-446bUVdin28GIjPm .doneCrit2,#mermaid-svg-446bUVdin28GIjPm .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-446bUVdin28GIjPm .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-446bUVdin28GIjPm .milestoneText{font-style:italic}#mermaid-svg-446bUVdin28GIjPm .doneCritText0,#mermaid-svg-446bUVdin28GIjPm .doneCritText1,#mermaid-svg-446bUVdin28GIjPm .doneCritText2,#mermaid-svg-446bUVdin28GIjPm .doneCritText3{fill:#000 !important}#mermaid-svg-446bUVdin28GIjPm .activeCritText0,#mermaid-svg-446bUVdin28GIjPm .activeCritText1,#mermaid-svg-446bUVdin28GIjPm .activeCritText2,#mermaid-svg-446bUVdin28GIjPm .activeCritText3{fill:#000 !important}#mermaid-svg-446bUVdin28GIjPm .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-446bUVdin28GIjPm g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-446bUVdin28GIjPm g.classGroup text .title{font-weight:bolder}#mermaid-svg-446bUVdin28GIjPm g.clickable{cursor:pointer}#mermaid-svg-446bUVdin28GIjPm g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-446bUVdin28GIjPm g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-446bUVdin28GIjPm .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-446bUVdin28GIjPm .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-446bUVdin28GIjPm .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-446bUVdin28GIjPm .dashed-line{stroke-dasharray:3}#mermaid-svg-446bUVdin28GIjPm #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-446bUVdin28GIjPm #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-446bUVdin28GIjPm #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-446bUVdin28GIjPm #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-446bUVdin28GIjPm #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-446bUVdin28GIjPm #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-446bUVdin28GIjPm #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-446bUVdin28GIjPm #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-446bUVdin28GIjPm .commit-id,#mermaid-svg-446bUVdin28GIjPm .commit-msg,#mermaid-svg-446bUVdin28GIjPm .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-446bUVdin28GIjPm .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-446bUVdin28GIjPm .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-446bUVdin28GIjPm g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-446bUVdin28GIjPm g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-446bUVdin28GIjPm g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-446bUVdin28GIjPm g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-446bUVdin28GIjPm g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-446bUVdin28GIjPm g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-446bUVdin28GIjPm .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-446bUVdin28GIjPm .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-446bUVdin28GIjPm .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-446bUVdin28GIjPm .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-446bUVdin28GIjPm .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-446bUVdin28GIjPm .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-446bUVdin28GIjPm .edgeLabel text{fill:#333}#mermaid-svg-446bUVdin28GIjPm .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-446bUVdin28GIjPm .node circle.state-start{fill:black;stroke:black}#mermaid-svg-446bUVdin28GIjPm .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-446bUVdin28GIjPm #statediagram-barbEnd{fill:#9370db}#mermaid-svg-446bUVdin28GIjPm .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-446bUVdin28GIjPm .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-446bUVdin28GIjPm .statediagram-state .divider{stroke:#9370db}#mermaid-svg-446bUVdin28GIjPm .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-446bUVdin28GIjPm .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-446bUVdin28GIjPm .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-446bUVdin28GIjPm .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-446bUVdin28GIjPm .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-446bUVdin28GIjPm .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-446bUVdin28GIjPm .note-edge{stroke-dasharray:5}#mermaid-svg-446bUVdin28GIjPm .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-446bUVdin28GIjPm .error-icon{fill:#522}#mermaid-svg-446bUVdin28GIjPm .error-text{fill:#522;stroke:#522}#mermaid-svg-446bUVdin28GIjPm .edge-thickness-normal{stroke-width:2px}#mermaid-svg-446bUVdin28GIjPm .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-446bUVdin28GIjPm .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-446bUVdin28GIjPm .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-446bUVdin28GIjPm .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-446bUVdin28GIjPm .marker{fill:#333}#mermaid-svg-446bUVdin28GIjPm .marker.cross{stroke:#333}:root { --mermaid-font-family: "trebuchet ms", verdana, arial;}#mermaid-svg-446bUVdin28GIjPm {color: rgba(0, 0, 0, 0.75);font: ;}

i从0循环到31
开始
取待解密的数据4个32位的数据,X0,X1,X2,X3
Xi+1异或Xi+2异或Xi+3异或rk31-i = Ai, 注意i+1,x+2,x+3为X的角标, 31-i为rk的角标
Ai进行S盒计算得到Bi,即查表
Ci = Bi 异或 Bi循环左移2 异或 Bi循环左移10 异或 Bi循环左移18 异或 Bi循环左移24
Xi 异或 Ci = Xi+4, 注意i+4为X的角标
得到X4...X35
X35 X34 X33 X32 就是解密后的内容, 注意顺序不能变
这里与加密不同
    CK = [0x00070E15,0x1c232a31,0x383f464d,0x545b6269,0x70777e85,0x8c939aa1,0xa8afb6bd,0xc4cbd2d9,0xe0e7eef5,0xfc030a11,0x181f262d,0x343b4249,0x50575e65,0x6c737a81,0x888f969d,0xa4abb2b9,0xc0c7ced5,0xdce3eaf1,0xf8ff060d,0x141b2229,0x30373e45,0x4c535a61,0x686f767d,0x848b9299,0xa0a7aeb5,0xbcc3cad1,0xd8dfe6ed,0xf4fb0209,0x10171e25,0x2c333a41,0x484f565d,0x646b7279]# 常数 FK = [0xa3b1bac6,0x56aa3350,0x677d9197,0xb27022dc]# S盒的列表SboxTable = [0xd6, 0x90, 0xe9, 0xfe, 0xcc, 0xe1, 0x3d, 0xb7, 0x16, 0xb6, 0x14, 0xc2, 0x28, 0xfb, 0x2c, 0x05,0x2b, 0x67, 0x9a, 0x76, 0x2a, 0xbe, 0x04, 0xc3, 0xaa, 0x44, 0x13, 0x26, 0x49, 0x86, 0x06, 0x99,0x9c, 0x42, 0x50, 0xf4, 0x91, 0xef, 0x98, 0x7a, 0x33, 0x54, 0x0b, 0x43, 0xed, 0xcf, 0xac, 0x62,0xe4, 0xb3, 0x1c, 0xa9, 0xc9, 0x08, 0xe8, 0x95, 0x80, 0xdf, 0x94, 0xfa, 0x75, 0x8f, 0x3f, 0xa6,0x47, 0x07, 0xa7, 0xfc, 0xf3, 0x73, 0x17, 0xba, 0x83, 0x59, 0x3c, 0x19, 0xe6, 0x85, 0x4f, 0xa8,0x68, 0x6b, 0x81, 0xb2, 0x71, 0x64, 0xda, 0x8b, 0xf8, 0xeb, 0x0f, 0x4b, 0x70, 0x56, 0x9d, 0x35,0x1e, 0x24, 0x0e, 0x5e, 0x63, 0x58, 0xd1, 0xa2, 0x25, 0x22, 0x7c, 0x3b, 0x01, 0x21, 0x78, 0x87,0xd4, 0x00, 0x46, 0x57, 0x9f, 0xd3, 0x27, 0x52, 0x4c, 0x36, 0x02, 0xe7, 0xa0, 0xc4, 0xc8, 0x9e,0xea, 0xbf, 0x8a, 0xd2, 0x40, 0xc7, 0x38, 0xb5, 0xa3, 0xf7, 0xf2, 0xce, 0xf9, 0x61, 0x15, 0xa1,0xe0, 0xae, 0x5d, 0xa4, 0x9b, 0x34, 0x1a, 0x55, 0xad, 0x93, 0x32, 0x30, 0xf5, 0x8c, 0xb1, 0xe3,0x1d, 0xf6, 0xe2, 0x2e, 0x82, 0x66, 0xca, 0x60, 0xc0, 0x29, 0x23, 0xab, 0x0d, 0x53, 0x4e, 0x6f,0xd5, 0xdb, 0x37, 0x45, 0xde, 0xfd, 0x8e, 0x2f, 0x03, 0xff, 0x6a, 0x72, 0x6d, 0x6c, 0x5b, 0x51,0x8d, 0x1b, 0xaf, 0x92, 0xbb, 0xdd, 0xbc, 0x7f, 0x11, 0xd9, 0x5c, 0x41, 0x1f, 0x10, 0x5a, 0xd8,0x0a, 0xc1, 0x31, 0x88, 0xa5, 0xcd, 0x7b, 0xbd, 0x2d, 0x74, 0xd0, 0x12, 0xb8, 0xe5, 0xb4, 0xb0,0x89, 0x69, 0x97, 0x4a, 0x0c, 0x96, 0x77, 0x7e, 0x65, 0xb9, 0xf1, 0x09, 0xc5, 0x6e, 0xc6, 0x84,0x18, 0xf0, 0x7d, 0xec, 0x3a, 0xdc, 0x4d, 0x20, 0x79, 0xee, 0x5f, 0x3e, 0xd7, 0xcb, 0x39, 0x48]

SM4国密算法整理-流程图相关推荐

  1. SM4国密算法实现分析

    SM4国密算法实现分析 代码下载请见 上一篇文章 AES算法实现分析 SM4的说明(pdf):http://download.csdn.net/detail/leechiyang/5008528 算法 ...

  2. SM2 (含SM3、SM4)国密算法工具QT版,彻底搞懂sm2算法的使用

    网上有很多网友问算法SM2怎么使用?什么是压缩公钥和非压缩公钥?xB和yB这参数是什么?怎么使用SM2做加解密?如何签名和验签?有没有工具来验证下? 这里分享个自己用QT造的一个小工具,简单好用,同时 ...

  3. 使用wireshark抓包,本地环回测试通信数据已经通过SM4国密算法加密

    具体操作 本实验采用 本地环回测试 开启wireshark抓包工具,设定端口号 tcp.port == 5099 (5099为服务端对外开启服务的端口号),不可以使用ip.addr指定ip地址,因为本 ...

  4. SM4国密算法原理及python代码实现

    SM4简介 SM4.0(原名SMS4.0)是中华人民共和国政府采用的一种分组密码标准,由国家密码管理局于2012年3月21日发布.相关标准为"GM/T 0002-2012<SM4分组密 ...

  5. Delphi SM2/SM4国密算法

    最近忙个医保平台的项目,涉及SM2/SM4的签名,验签,加密,解密的业务操作过程.毕竟现在用Delpih的人不是很多,懂这方面的技术的人也更少,能涉及密码算法的少之更少,网上也能搜到一些开源的代码,也 ...

  6. 国密算法-SM4加解密工具类

    import cn.hutool.crypto.symmetric.SymmetricCrypto;/*** @author : chenfan* @className : SM4Utils* @da ...

  7. 国密算法 SM4加密算法 Python完整实现

    SM4介绍 SM4算法是一种对称加密算法,也被称为国密算法.它是由中国密码学家设计的,已被列入国家密码局的标准. SM4算法使用128位的密钥和分组大小,使用32轮迭代加密,可以用于加密数据和验证消息 ...

  8. python商用_python实现sm2和sm4国密(国家商用密码)算法的示例

    GMSSL模块介绍 GmSSL是一个开源的加密包的python实现,支持SM2/SM3/SM4等国密(国家商用密码)算法.项目采用对商业应用友好的类BSD开源许可证,开源且可以用于闭源的商业应用. 安 ...

  9. 国密算法SM3与SM4简介与应用

    点击上方蓝字可直接关注!方便下次阅读.如果对你有帮助,麻烦点个在看或点个赞,感谢~ 最近0基础在学习国密算法的相关应用,故此和大家分享下自己的一些经历. 程序平台: Ubuntu16.04  x64 ...

最新文章

  1. 使用JavaScript代码制作99乘法表
  2. html图片上传选择文件后的事件,bootstrap-fileinput插件,上传成功后事件
  3. Sitecore A / B测试
  4. 青客宝团队redis内部分享ppt
  5. excel导航窗格_Excel小技巧16:在每天的某个时刻自动打开特定工作簿
  6. vue 同步加载_2019 前端面试题汇总(主要为 Vue)
  7. 关于主函数main(int argc,char *argv[])
  8. 编译GDAL支持MySQL
  9. Matlab2016A安装步骤
  10. 超键、候选键、主键区别?
  11. 【常见网页排版布局】
  12. justinmind夜话:数据母板系列视频教程之原型设计二十一条军规
  13. 洛谷 p2387 [noi2014] 膜fa♂森林 lct维护最小生成树
  14. 中国宗教场所地理分布数据
  15. 对N行N列二维数组的每一行排序,偶数行(0当作偶数)由小到大排序,奇数行由大到小排序
  16. 计算机专业论文docx,计算机专业毕业大学生论文.docx
  17. IT行业和互联网行业是什么关系?
  18. K8S的 CNI 详细原理以及解释
  19. linux设置防火墙开放端口
  20. GO、Java、C/C++、Python,这些编程语言谁才是王者?

热门文章

  1. matlab做干涉,matlab模拟干涉衍射 | 学步园
  2. [bzoj1529][POI2005]ska Piggy banks 大水题
  3. GEE学习笔记 五十一:Fusion Table将在2019年12月3日关闭
  4. 手游SDK相关业务知识
  5. VBA msgbox用法
  6. 7时过2小时是几时_7时过2小时是几时_飞机2小时和高铁7小时你愿意坐哪个?
  7. 单片机三角波c语言代码,使用51单片机实现三角波输出系统的设计资料说明
  8. 初识嵌入式之WeMos D1超声波感应开盖垃圾桶
  9. PC软件问题【微信多开】【Beyond Compare 4 试用期过的解决办法】【搜狗输入法配置时间输入格式】【win10设置登录界面名称】[Syncovery忽略选项][电脑共享配置登陆密码]
  10. 为什么只有义乌个体户可以无限制结汇美金,什么原因