C程序模拟3转子的恩格玛机

来源:本站
导读:目前正在解读《C程序模拟3转子的恩格玛机》的相关信息,《C程序模拟3转子的恩格玛机》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《C程序模拟3转子的恩格玛机》的详细说明。
简介:本文和大家分享一个C程序模拟3转子的恩格玛机,感兴趣的朋友可以看看。

 #include "stdafx.h" #include "egm1.h"  zz zz_1;//定义3个转子 zz zz_2; zz zz_3; int fs[13][2];//定义反射板////////////////////////////////////////////////////////////////////////////////////////////////////////////void ege1_init(){  //初始化恩格玛机  zz_1.d=0;  zz_2.d=0;  zz_3.d=0;   //定义1号转子的接线盘  zz_1.lj[0][0]=0;  zz_1.lj[0][1]=2;   zz_1.lj[1][0]=1;  zz_1.lj[1][1]=4;  zz_1.lj[2][0]=2;  zz_1.lj[2][1]=6;  zz_1.lj[3][0]=3;  zz_1.lj[3][1]=8;  zz_1.lj[4][0]=4;  zz_1.lj[4][1]=10;  zz_1.lj[5][0]=5;  zz_1.lj[5][1]=12;  zz_1.lj[6][0]=6;  zz_1.lj[6][1]=14;  zz_1.lj[7][0]=7;  zz_1.lj[7][1]=16;  zz_1.lj[8][0]=8;  zz_1.lj[8][1]=18;  zz_1.lj[9][0]=9;  zz_1.lj[9][1]=20;  zz_1.lj[10][0]=10;  zz_1.lj[10][1]=22;  zz_1.lj[11][0]=11;  zz_1.lj[11][1]=24;  zz_1.lj[12][0]=12;  zz_1.lj[12][1]=25;  zz_1.lj[13][0]=13;  zz_1.lj[13][1]=1;  zz_1.lj[14][0]=14;  zz_1.lj[14][1]=3;  zz_1.lj[15][0]=15;  zz_1.lj[15][1]=5;  zz_1.lj[16][0]=16;  zz_1.lj[16][1]=7;  zz_1.lj[17][0]=17;  zz_1.lj[17][1]=9;  zz_1.lj[18][0]=18;  zz_1.lj[18][1]=11;  zz_1.lj[19][0]=19;  zz_1.lj[19][1]=13;  zz_1.lj[20][0]=20;  zz_1.lj[20][1]=15;  zz_1.lj[21][0]=21;  zz_1.lj[21][1]=17;  zz_1.lj[22][0]=22;  zz_1.lj[22][1]=19;  zz_1.lj[23][0]=23;  zz_1.lj[23][1]=21;  zz_1.lj[24][0]=24;  zz_1.lj[24][1]=23;  zz_1.lj[25][0]=25;  zz_1.lj[25][1]=0;  //定义2号转子的接线盘  zz_2.lj[0][0]=0;  zz_2.lj[0][1]=2;   zz_2.lj[1][0]=1;  zz_2.lj[1][1]=4;  zz_2.lj[2][0]=2;  zz_2.lj[2][1]=6;  zz_2.lj[3][0]=3;  zz_2.lj[3][1]=8;  zz_2.lj[4][0]=4;  zz_2.lj[4][1]=10;  zz_2.lj[5][0]=5;  zz_2.lj[5][1]=12;  zz_2.lj[6][0]=6;  zz_2.lj[6][1]=14;  zz_2.lj[7][0]=7;  zz_2.lj[7][1]=16;  zz_2.lj[8][0]=8;  zz_2.lj[8][1]=18;  zz_2.lj[9][0]=9;  zz_2.lj[9][1]=20;  zz_2.lj[10][0]=10;  zz_2.lj[10][1]=22;  zz_2.lj[11][0]=11;  zz_2.lj[11][1]=24;  zz_2.lj[12][0]=12;  zz_2.lj[12][1]=25;  zz_2.lj[13][0]=13;  zz_2.lj[13][1]=1;  zz_2.lj[14][0]=14;  zz_2.lj[14][1]=3;  zz_2.lj[15][0]=15;  zz_2.lj[15][1]=5;  zz_2.lj[16][0]=16;  zz_2.lj[16][1]=7;  zz_2.lj[17][0]=17;  zz_2.lj[17][1]=9;  zz_2.lj[18][0]=18;  zz_2.lj[18][1]=11;  zz_2.lj[19][0]=19;  zz_2.lj[19][1]=13;  zz_2.lj[20][0]=20;  zz_2.lj[20][1]=15;  zz_2.lj[21][0]=21;  zz_2.lj[21][1]=17;  zz_2.lj[22][0]=22;  zz_2.lj[22][1]=19;  zz_2.lj[23][0]=23;  zz_2.lj[23][1]=21;  zz_2.lj[24][0]=24;  zz_2.lj[24][1]=23;  zz_2.lj[25][0]=25;  zz_2.lj[25][1]=0;  //定义3号转子的接线盘  zz_3.lj[0][0]=0;  zz_3.lj[0][1]=2;   zz_3.lj[1][0]=1;  zz_3.lj[1][1]=4;  zz_3.lj[2][0]=2;  zz_3.lj[2][1]=6;  zz_3.lj[3][0]=3;  zz_3.lj[3][1]=8;  zz_3.lj[4][0]=4;  zz_3.lj[4][1]=10;  zz_3.lj[5][0]=5;  zz_3.lj[5][1]=12;  zz_3.lj[6][0]=6;  zz_3.lj[6][1]=14;  zz_3.lj[7][0]=7;  zz_3.lj[7][1]=16;  zz_3.lj[8][0]=8;  zz_3.lj[8][1]=18;  zz_3.lj[9][0]=9;  zz_3.lj[9][1]=20;  zz_3.lj[10][0]=10;  zz_3.lj[10][1]=22;  zz_3.lj[11][0]=11;  zz_3.lj[11][1]=24;  zz_3.lj[12][0]=12;  zz_3.lj[12][1]=25;  zz_3.lj[13][0]=13;  zz_3.lj[13][1]=1;  zz_3.lj[14][0]=14;  zz_3.lj[14][1]=3;  zz_3.lj[15][0]=15;  zz_3.lj[15][1]=5;  zz_3.lj[16][0]=16;  zz_3.lj[16][1]=7;  zz_3.lj[17][0]=17;  zz_3.lj[17][1]=9;  zz_3.lj[18][0]=18;  zz_3.lj[18][1]=11;  zz_3.lj[19][0]=19;  zz_3.lj[19][1]=13;  zz_3.lj[20][0]=20;  zz_3.lj[20][1]=15;  zz_3.lj[21][0]=21;  zz_3.lj[21][1]=17;  zz_3.lj[22][0]=22;  zz_3.lj[22][1]=19;  zz_3.lj[23][0]=23;  zz_3.lj[23][1]=21;  zz_3.lj[24][0]=24;  zz_3.lj[24][1]=23;  zz_3.lj[25][0]=25;  zz_3.lj[25][1]=0;  //定义反射板接线盘  fs[0][0]=0;  fs[0][1]=1;  fs[1][0]=2;  fs[1][1]=3;  fs[2][0]=4;  fs[2][1]=5;  fs[3][0]=6;  fs[3][1]=7;  fs[4][0]=8;  fs[4][1]=9;  fs[5][0]=10;  fs[5][1]=11;  fs[6][0]=12;  fs[6][1]=13;  fs[7][0]=14;  fs[7][1]=15;  fs[8][0]=16;  fs[8][1]=17;  fs[9][0]=18;  fs[9][1]=19;  fs[10][0]=20;  fs[10][1]=21;  fs[11][0]=22;  fs[11][1]=23;  fs[12][0]=24;  fs[12][1]=25;}////////////////////////////////////////////////////////////////////////////////////////////////////////////int getfs(int data){    //用反射板进行一次数据转换 int i; for(i=0;i<=12;i++) {     if(fs[i][0]==data) return fs[i][1]; }    for(i=0;i<=12;i++) {     if(fs[i][1]==data) return fs[i][0]; } return 88;//错误}////////////////////////////////////////////////////////////////////////////////////////////////////////////int getzz_R( zz ZZ,int data){ //用转子进行一次数据转换 从右往左    int i; for(i=0;i<=25;i++) {      if(ZZ.lj[i][0]==data) return ZZ.lj[i][1]; } return 88;//错误}////////////////////////////////////////////////////////////////////////////////////////////////////////////int getzz_L( zz ZZ,int data){ //用转子进行一次数据转换  从左往右 int i; for(i=0;i<=25;i++) {      if(ZZ.lj[i][1]==data) return ZZ.lj[i][0]; } return 88;//错误}////////////////////////////////////////////////////////////////////////////////////////////////////////////int getzz1_R(int data){ return getzz_R(zz_1,data);}int getzz1_L(int data){ return getzz_L(zz_1,data);}int getzz2_R(int data){ return getzz_R(zz_2,data);}int getzz2_L(int data){ return getzz_L(zz_2,data);}int getzz3_R(int data){ return getzz_R(zz_3,data);}int getzz3_L(int data){ return getzz_L(zz_3,data);}////////////////////////////////////////////////////////////////////////////////////////////////////////////void setkey(int zz1,int zz2,int zz3){  //设置密钥  zz_1.d=zz1;  zz_2.d=zz2;  zz_3.d=zz3;}int jiami(int data){ //对一个字符进行加密 data=data+zz_1.d; if(data>25) data-=26; //修正并定位转动后的1号转子的触点位置 data=getzz1_R(data);  //经过第一个转子的处理     if(zz_1.d<zz_2.d) {  //2号转动次数比1号多  data=data+(zz_2.d-zz_1.d);  if(data>25) data-=26; //修正并定位转动后的2号转子的触点位置 } if(zz_1.d>zz_2.d)     {    //2号转动次数比1号少  data=data-(zz_1.d-zz_2.d);  if(data<0) data+=26;  //修正并定位转动后的2号转子的触点位置 } data=getzz2_R(data);  //经过第2个转子的处理     if(zz_2.d<zz_3.d) {  //3号转动次数比2号多  data=data+(zz_3.d-zz_2.d);  if(data>25) data-=26; //修正并定位转动后的2号转子的触点位置 } if(zz_2.d>zz_3.d)     {    //3号转动次数比2号少  data=data-(zz_2.d-zz_3.d);  if(data<0) data+=26;  //修正并定位转动后的2号转子的触点位置 }    data=getzz3_R(data);  //经过第3个转子的处理 //////////////////////////////////////////////////////////////////////////////////// //反射后处理    data=data-zz_3.d; if(data<0) data+=26;    data=getfs(data);  //经过反射板的处理    data=data+zz_3.d;    if(data>25) data-=26; //修正并定位反射后的3号转子的触点位置    data=getzz3_L(data);  //经过第3个转子的处理    if(zz_3.d<zz_2.d) {  //2号转动次数比3号多  data=data+(zz_2.d-zz_3.d);  if(data>25) data-=26; //修正并定位转动后的2号转子的触点位置 } if(zz_3.d>zz_2.d)     {    //2号转动次数比3号少  data=data-(zz_3.d-zz_2.d);  if(data<0) data+=26;  //修正并定位转动后的2号转子的触点位置 }    data=getzz2_L(data);  //经过第2个转子的处理      if(zz_2.d<zz_1.d) {  //2号转动次数比3号多  data=data+(zz_1.d-zz_2.d);  if(data>25) data-=26; //修正并定位转动后的2号转子的触点位置 } if(zz_2.d>zz_1.d)     {    //2号转动次数比3号少  data=data-(zz_2.d-zz_1.d);  if(data<0) data+=26;  //修正并定位转动后的2号转子的触点位置 }    data=getzz1_L(data);  //经过第1个转子的处理 data=data-zz_1.d; if(data<0) data+=26;//最后返回的数据    ///////////// //转子转动    if(zz_1.d<25) zz_1.d++;else zz_1.d=0; if(zz_2.d<25) {if((zz_1.d%2)==0) zz_2.d++;} else zz_2.d=0;    if(zz_3.d<25) {if((zz_1.d%3)==0) zz_3.d++;} else zz_3.d=0; ///////////// return data;}////////////////////////////////////////////////////////////////////////////////////////////////////////////

提醒:《C程序模拟3转子的恩格玛机》最后刷新时间 2024-03-14 01:01:29,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《C程序模拟3转子的恩格玛机》该内容的真实性请自行鉴别。