古典密码之希尔密码
希爾密碼(Hill Cipher)是運用基本矩陣論原理的替換密碼,由Lester S. Hill在1929年發明。每個字母當作26進制數字:A=0, B=1, C=2... 一串字母當成n維向量,跟一個n×n的矩陣相乘,再將得出的結果MOD26
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; }
總結
- 上一篇: 百练OJ:2764:数根
- 下一篇: 密码学之hill密码