一種playfair
密碼變種加密方法如下:首先選擇乙個金鑰單詞(稱為pair)(字母不重複,且都為小寫字母),然後與字母表中其他字母一起填入至乙個
5x5的方陣中,填入方法如下:
1.首先按行填入金鑰串。
2.緊接其後,按字母序按行填入不在金鑰串中的字母。
3.由於方陣中只有25
個位置,最後剩下的那個字母則不需變換。
如果金鑰為youandme
,則該方陣如下:
y o u a n
d m e b c
f g h i j
k l p q r
s t v w x
在加密一對字母時,如am
,在方陣中找到以這兩個字母為頂點的矩形(紅色字型):
y o u a n
d m e b c
f g h i j
k l p q r
s t v w x
這對字母的加密字母為該矩形的另一對頂點,如本例中為ob。
請設計程式,使用上述方法對輸入串進行加密,並輸出加密後的串。
另外有如下規定:
1、一對一對取字母,如果最後只剩下乙個字母,則不變換,直接放入加密串中;
2、如果一對字母中的兩個字母相同,則不變換,直接放入加密串中;
3、如果一對字母中有乙個字母不在正方形中,則不變換,直接放入加密串中;
4、如果字母對出現在方陣中的同一行或同一列,如df或hi
,則只需簡單對調這兩個字母,即變換為fd或
ih;5、如果在正方形中能夠找到以字母對為頂點的矩形,假如字母對為
am,則該矩形的另一對頂點字母中,與
a同行的字母應在前面,在上例中應是
ob;同樣若待變換的字母對為
ta,則變換後的字母對應為wo;
6、本程式中輸入串均為小寫字母,並不含標點、空格或其它字元。
解密方法與加密相同,即對加密後的字串再加密,將得到原始串。
要求輸入形式如下:
從控制台輸入兩行字串,第一行為金鑰單詞(長度小於等於25
),第二行為待加密字串(長度小於等於
50),兩行字串末尾都有乙個回車換行符,並且兩行字串均為小寫字母,不含其它字元。
在標準輸出上輸出加密後的字串。
例如,若輸入:
youandme
welcometohangzhou
則表示輸入的金鑰單詞為youandme
,形成的正方形如上所示;待加密字串為
welcometohangzhou
。在正方形中可以找到以第一對字母
we為頂點的矩形,對應另一對頂點字母為
vb,因此加密後為
vb,同理可找到與字母對
lc,et,oh,ho
對應的頂點字母對。而字母對
om位於上述正方形中的同一列,所以直接以顛倒這兩個字母來加密,即為
mo,字母對
an同理。字母對
gz中的
z不在上述正方形中,因此原樣放到加密串中。最後剩乙個字母
u也原樣輸出。
因此輸出的結果為:
vbrmmomvugnagzguu
要求考生把所有函式寫在乙個檔案中。除錯好後,存入與考生資料夾下對應題號的「解答.txt
」中即可。相關的工程檔案不要拷入。
#include #include using namespace std;
bool find(char*,int,char);
void findid(char[5][5],int&,int&,char);
int main();
char key[26],yuanwen[51],fangzhen[5][5],miwen[51];
printf("請輸入金鑰串(-25):\n");
gets(key);
printf("請輸入原文(-50):\n");
gets(yuanwen);
int t=0,k=0;
int len=strlen(key);
for (int i=0;i<5;++i)
for (int j=0;j<5;++j)
}int i_1=-1,i_2=-1,j_1=-1,j_2=-1;
int n=strlen(yuanwen);
for (int i=0;ielse if(i_1==i_2||j_1==j_2)
else
}} printf("加密後的密文為:\n");
puts(miwen);
}bool find(char *key,int n,char c)
void findid(char fangzhen[5][5],int &ri,int &rj,char c)
return;
}
2023年藍橋杯預賽第十題加密
題目 一種playfair密碼變種加密方法如下 首先選擇乙個金鑰單詞 稱為pair 字母不重複,且都為小寫字母 然後與字母表中其他字母一起填入至乙個5x5的方陣中,填入方法如下 1.首先按行填入金鑰串。2.緊接其後,按字母序按行填入不在金鑰串中的字母。3.由於方陣中只有25個位置,最後剩下的那個字母...
藍橋杯 用n位二進位制加密串
在對文字進行簡單加密的時候,可以選擇用乙個n位的二進位制數,對原文進行異或運算。解密的方法就是再執行一次同樣的操作。加密過程中n位二進位制數會迴圈使用。並且其長度也可能不是8的整數倍。下面的 演示了如何實現該功能。請仔細閱讀,填寫空缺的 下劃線部分 注意 請把填空的答案 僅填空處的答案,不包括題面 ...
字串加密
輸入一串字元 長度不超過100 和乙個正整數k,將其中的英文本母加密並輸出加密後的字串,非英文本母不變。加密思想 將每個字母c加乙個序數k,即用它後面的第k個字母代替,變換公式 c c k。如果字母為z,則後乙個字母是a,也就是字母字元形成乙個圓。輸入第一行是若干字元,以回車結束。輸入第二行是乙個整...