密碼學之hill密碼
阿新 • • 發佈:2019-01-22
C++實現該演算法
#include <iostream> using namespace std; int getNum(char c); char getLettet(int a); int main() { /**本程式碼以3個字母的長度為例*/ int p[3];//用來儲存明文 int c[3]={0,0,0};//用來儲存密文 int k[3][3] ={17,17,5,21,18,21,2,2,19};//密匙 cout<<"輸入3個小寫英文s字母的明文:"<<endl; for(int i=0;i<3;i++){ char tem; cin >>tem; p[i]=getNum(tem); } cout<<"密文是:"<<endl; for(int i=0;i<3;i++){ for(int j=0;j<3;j++){ c[i]+=p[j]*k[j][i]; } cout<<getLettet(c[i]%26); } return 0; } int getNum(char c){ //將字元轉為數字 switch(c){ case 'a':return 0; case 'b':return 1; case 'c':return 2; case 'd':return 3; case 'e':return 4; case 'f':return 5; case 'g':return 6; case 'h':return 7; case 'i':return 8; case 'j':return 9; case 'k':return 10; case 'l':return 11; case 'm':return 12; case 'n':return 13; case 'o':return 14; case 'p':return 15; case 'q':return 16; case 'r':return 17; case 's':return 18; case 't':return 19; case 'u':return 20; case 'v':return 21; case 'w':return 22; case 'x':return 23; case 'y':return 24; case 'z':return 25; } return -1; } char getLettet(int a){ //將數字轉為明文 switch(a){ case 0:return 'a'; case 1:return 'b'; case 2:return 'c'; case 3:return 'd'; case 4:return 'e'; case 5:return 'f'; case 6:return 'g'; case 7:return 'h'; case 8:return 'i'; case 9:return 'j'; case 10:return 'k'; case 11:return 'l'; case 12:return 'm'; case 13:return 'n'; case 14:return 'o'; case 15:return 'p'; case 16:return 'q'; case 17:return 'r'; case 18:return 's'; case 19:return 't'; case 20:return 'u'; case 21:return 'v'; case 22:return 'w'; case 23:return 'x'; case 24:return 'y'; case 25:return 'z'; } return -1; }