#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转子的恩格玛机》的相关信息,《C程序模拟3转子的恩格玛机》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《C程序模拟3转子的恩格玛机》的详细说明。
简介:本文和大家分享一个C程序模拟3转子的恩格玛机,感兴趣的朋友可以看看。
提醒:《C程序模拟3转子的恩格玛机》最后刷新时间 2024-03-14 01:01:29,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《C程序模拟3转子的恩格玛机》该内容的真实性请自行鉴别。