藍橋(十) 加密串

2021-06-04 10:35:33 字數 2390 閱讀 3760

一種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,也就是字母字元形成乙個圓。輸入第一行是若干字元,以回車結束。輸入第二行是乙個整...