演算法基礎 加密與解密 程式設計

2021-06-21 17:04:02 字數 1553 閱讀 2907

設計程式

一種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

public class code

//生成加密矩陣

public static char matrixgenerate(string key);

int lettersnum = 0;

//替換掉密碼裡已經有的字母為字元'$'

for(int i=0;i

加密與解密基礎

加密 密碼編制學 解密 密碼分析學 明文本母空間 明文本母取值範圍 密文字母空間 加密後的字母取值範圍 金鑰 加密和解密過程中使用到的關鍵字 金鑰空間 金鑰字母的取值範圍 演算法 就是一些公式 法則或者程式,規定了明文與密文之間變換的法則.科克霍夫原則 1 第一等級,僅知道演算法攻擊 2 第二等級,...

加密與解密演算法

加密 public static string encode string data 解密 public static string decode string data catch descryptoserviceprovider cryptoprovider new descryptoservi...

DES加密與解密演算法

預設金鑰向量 private static readonly byte keys des加密字串 待加密的字串 加密成功返回加密後的字串,失敗返回源串 public static string encryptstring string encryptstring catch des解密字串 待解密的...