logo

ヴィジェネール暗号

導入

vigenere 暗号は、テキストの暗号化と復号化に使用されるアルゴリズムです。ヴィジェネレ暗号は、一連の織り交ぜられたシーザー暗号を使用してアルファベット テキストを暗号化するアルゴリズムです。キーワードの文字に基づいています。多アルファベット置換暗号の例です。このアルゴリズムは理解しやすく、実装も簡単です。このアルゴリズムは 1553 年に初めて記述されました。 ジョバン・バッティスタ・ベラッソ 。テキストの暗号化と復号化には Vigenere テーブルまたは Vigenere スクエアを使用します。ヴィジュネール表は、タブラ・レクタとも呼ばれます。

ヴィジェネレ暗号は 2 つの方法で実行されます。

方法 1

この方法では、vigenere テーブルが与えられた場合、vigenere テーブル (26 * 26 行列) を使用して暗号化と復号化が行われます。

ヴィジェネール暗号

例: 平文は「JAVATPOINT」、キーは「BEST」です。

新しいキーを生成するには、プレーン テキストの長さが新しいキーと等しくない限り、指定されたキーが循環的に繰り返されます。

ヴィジェネール暗号

暗号化

プロローグ言語

平文の最初の文字は、キーの最初の文字と結合されます。プレーンテキスト「J」の列とキー「B」の行は、vigenere テーブルのアルファベット「K」と交差するため、暗号文の最初の文字は「K」になります。

同様に、平文の 2 番目の文字がキーの 2 番目の文字と結合されます。プレーンテキスト「A」の列とキー「E」の行は、vigenere テーブルのアルファベット「E」と交差するため、暗号文の 2 番目の文字は「E」になります。

このプロセスは、平文が終了するまで継続的に続きます。

暗号文 = ケントゥTGボックス

復号化

復号化は、vigenere テーブル内のキーの行によって行われます。まず、鍵文字の行を選択し、その行内の暗号文文字の位置を見つけて、対応する暗号文の列ラベルを平文として選択します。

ヴィジェネール暗号

たとえば、キーの行は「B」、暗号文は「K」で、この暗号文文字は列「J」に表示されます。これは、最初の平文文字が「J」であることを意味します。

次に、キーの行は「E」、暗号文は「E」で、この暗号文文字は列「A」に表示されます。これは、2 番目の平文文字が「A」であることを意味します。

このプロセスは、暗号文が完成するまで継続的に続きます。

平文 = ジャバトポイント

オンスで10ml

方法 2

vigenere テーブルが指定されていない場合、暗号化と復号化は、このメソッドの Vigener の代数式によって行われます (文字 (A ~ Z) を数字 (0 ~ 25) に変換します)。

暗号化の公式は、

そして= (P+K) 対 26

復号化の式は、

D= (E-K) 対 26

万が一の場合(D) の値がマイナス (-ve) になるので、この場合はマイナスの値に 26 を加算します。

どこ、

E は暗号化を示します。

jsp javatpoint

D は復号化を示します。

P は平文を表します。

Kはキーを表します。

注: 以下の表に示すように、「i」は i 番目の文字のオフセットを示します。

ヴィジェネール暗号

例: 平文は「JAVATPOINT」、キーは「BEST」です。

暗号化: そして= (P+K) 対 26

平文 J T P N T
平文値(P) 09 00 21 00 19 15 14 08 13 19
B そして S T B そして S T B そして
キー値(K) 01 04 18 19 01 04 18 19 01 04
暗号文の値(E) 10 04 13 19 二十 19 06 01 14 23
暗号文 K そして N T T G B バツ

復号化: D= (E-K) 対 26

いずれかの場合 (Di) の値が負 (-ve) になる場合、この場合は負の値に 26 を加算します。暗号文の 3 番目の文字のように。

アプレット アプレット

N = 13 および S = 18

D= (E-K) 対 26

D= (13 - 18) 対 26

D= 26 に対して -5

D= (-5 + 26) 対 26

D= 21

暗号文 K そして N T T G B バツ
暗号文の値(E) 10 04 13 19 二十 19 06 01 14 23
B そして S T B そして S T B そして
キー値(K) 01 04 18 19 01 04 18 19 01 04
平文値(P) 09 00 21 00 19 15 14 08 13 19
平文 J T P N T

プログラム:

C言語

 #include #include using namespace std; int main() { Vigenere cipher(&apos;VIGENERECIPHER&apos;); string original = &apos;I AM INDIAN&apos;; string encrypted = cipher.encrypt(original); string decrypted = cipher.decrypt(encrypted); cout &lt;&lt; original &lt;&lt; endl; cout &lt;&lt; &apos;Encrypted: &apos; &lt;&lt; encrypted &lt;&lt; endl; cout &lt;&lt; &apos;Decrypted: &apos; &lt;&lt; decrypted &lt;&lt; endl; } class Vigenere { public: string key; Vigenere(string key) { for (int i = 0; i = &apos;A&apos; &amp;&amp; key[i] key += key[i]; else if (key[i]&gt;= &apos;a&apos; &amp;&amp; key[i] key += key[i] + &apos;A&apos; - &apos;a&apos;; } } string encrypt(string text) { string out; for (int i = 0, j = 0; i = &apos;a&apos; &amp;&amp; c <= 2 26 'z') c +="A" - 'a'; else if (c continue; out key[j] * 'a') % j="(j" 1) key.length(); } return out; string decrypt(string text) { for (int i="0," && <="z" ) 26) }; pre> <p> <strong>Output:</strong> </p> <pre> I AM INDIAN Encrypted: SDERFGTUJ Decrypted: IAMINDIAN </pre> <hr></=>