- #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;
- }
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////
复制代码
|