1. 程式人生 > >密碼學之hill密碼

密碼學之hill密碼

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;
}