- #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;
- }
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////
復制代碼
|