Vigen re密碼題解

2021-07-09 14:34:46 字數 2697 閱讀 5470

總時間限制:

1000ms

記憶體限制:

65536kb 描述

16世紀法國外交家blaise de vigenère設計了一種多表密碼加密演算法——vigenère密碼。vigenère密碼的加密解密演算法簡單易用,且破譯難度比較高,曾在美國南北戰爭中為南軍所廣泛使用。

在密碼學中,我們稱需要加密的資訊為明文,用m表示;稱加密後的資訊為密文,用c表示;而金鑰是一種引數,是將明文轉換為密文或將密文轉換為明文的演算法中輸入的資料,記為k。在vigenère密碼中,金鑰k是乙個字母串,k=k1k2…kn。當明文m=m1m2…mn時,得到的密文c=c1c2…cn,其中ci=mi®ki,運算®的規則如下表所示:

加密在操作時需要注意:

1. ®

運算忽略參與運算的字母的大小寫,並保持字母在明文m中的大小寫形式;

2. 當明文m的長度大於金鑰k的長度時,將金鑰k重複使用。

例如,明文m=helloworld,金鑰k=abc時,密文c=hfnlpyosnd。 明文

h e

l l

o w

o r

l d

金鑰 a

b c

a b

c a

b c

a 密文

h f

n l

p y

o s

n d

輸入 輸入共2行。

第一行為乙個字串,表示金鑰k,長度不超過100,其中僅包含大小寫字母。第二行為乙個字串,表示經加密後的密文,長度不超過1000,其中僅包含大小寫字母。

對於100%的資料,輸入的金鑰的長度不超過100,輸入的密文的長度不超過1000,且都僅包含英文本母。輸出

輸出共1行,乙個字串,表示輸入金鑰和密文所對應的明文。

樣例輸入

completevictory

yvqgpxaimmklongnzfwpvxmniytm

樣例輸出

wherethereisawillthereisaway **

noip2012

複賽 提高組 第一題

題解:注意本題是由密文解密為原文。由於金鑰和密文需要進行相互運算,所以轉換大小寫是必不可少的,題目有要求原文大小寫與密文一致,所以我們可以用乙個陣列

int miwen_x[2000] 來儲存原文大小寫的資料

讀入密文、金鑰,轉換大小寫並且記錄密文的大小寫狀況

本表指 一對金鑰與原文可以加密成密文,現在要翻譯密文,也就是知道對應的點,也知道了y軸座標,求x軸座標。

1.當密文≥金鑰時,我們發現資料是依次遞增的,則此時ans[i]=miwen[i]-key[j]+'a'

2.當密文《金鑰時,資料由最右端向左依次遞減,此時ans[i]='z'-(key[j]-miwen[i]-1)

j的意義在後面。

注意這裡還有乙個易錯點,金鑰的長度可能小於密文的長度,那麼當金鑰較短時就要運用迴圈多次使用此金鑰

int j=0;

並且在每次迴圈後

j++;

if(j==strlen(key))

j=0;

最後通過miwen_x[i]的值將原文的大小寫形式恢復原樣

這樣就解決此問題了

本題總思路:

1.

讀入金鑰、密文並轉換成小寫(大寫也可),同時記錄密文的大小寫情況

2.

運用演算法算出原文

3.

通過大小寫情況恢復原文的大小寫

#include#include#include#includeint change(int i)//大小寫轉換 

int main()

char ans[1200];

int j=0;

for(int i=0;i<=strlen(miwen)-1;i++)

ans[strlen(miwen)]=0;

printf("%s",ans);

return 0;

}

2012 noip提高 Vigen re 密碼

16 世紀法國外交家 blaise de vigen reblaisedevigene re 設計了一種多表密碼加密演算法 vigen revigene re 密碼。vigen revigene re 密碼的加密解密演算法簡單易用,且破譯難度比較高,曾在美國南北戰爭中為南軍所廣泛使用。在密碼學中,我...

洛谷 P1079 Vigen re 密碼

題目描述 16 世紀法國外交家 blaise de vigen re 設計了一種多表密碼加密演算法 vigen re 密 碼。vigen re 密碼的加密解密演算法簡單易用,且破譯難度比較高,曾在美國南北戰爭中為 南軍所廣泛使用。在密碼學中,我們稱需要加密的資訊為明文,用 m 表示 稱加密後的資訊為...

洛谷 P1079 Vigen re 密碼

題目描述 16 世紀法國外交家 blaise de vigen re 設計了一種多表密碼加密演算法 vigen re 密碼。vigen re 密碼的加密解密演算法簡單易用,且破譯難度比較高,曾在美國南北戰爭中為南軍所廣泛使用。在密碼學中,我們稱需要加密的資訊為明文,用 m 表示 稱加密後的資訊為密文...