従来の暗号化テクノロジは、今日のネットワーク セキュリティにおいて大きな役割を果たすことはできませんが、暗号化と暗号化の歴史の基礎であるため、暗号化に関するすべての本の冒頭で紹介されます。ヴィジェネレ暗号に関する章のほぼすべての暗号学の本には、ヴィジェネレ暗号のメカニズムを説明する「ヴィジェネレ置換テーブル」が記載されています:
暗号化プロセスは非常に単純です。つまり、鍵文字 x と平文文字 y が与えられると、暗号文文字は x 行と y 列にある文字になります。これにより、メッセージの暗号化には、通常、キー文字列がキーワードの繰り返しである限り、キー文字列が必要であることが決まります。
この記事では、「暗号化とネットワーク セキュリティ - 原則と実践」の例を例として使用します。たとえば、キーワードが欺瞞的で、メッセージが「発見されました。自分自身を保存してください」である場合、暗号化プロセスは次のようになります:
暗号文の最初の文字「Z」はどのようにして得られたのですか? Vigenere 置換テーブルから、キー文字列の行として「d」、メッセージ内の列として「w」を含む文字は「Z」です。
ルックアップ テーブル方式を使用して数回暗号化すると、ルールを簡単に要約できます: 0 ~ 25 の数字 A ~ Z、その後、暗号化プロセスでは、置換テーブルの最初の行にあるメッセージ文字が検索されます。 「w」として、d (つまり 3) 回後方に移動すると、結果の文字が暗号文になります。カウントが最後に達すると、次のシフトは最初 (つまり A) から継続されます。 つまり、A~Zをリングとみなして、メッセージ文字を決定した後、そのリングの特定の方向にポインタを移動させるのが、その回数となります。これは実際にはモジュロ 26 プロセスです。
詳しく説明すると、上記の暗号化では 26 文字のみ暗号化でき、大文字と小文字は区別されません。しかし実際には、英語には文字の他に句読点やスペースもあります。ほとんどの英語文字を考慮すると、Vigenere 置換テーブルは比較的大きくなり、少しスペースの無駄になります。暗号化できる文字が N 個あると仮定し、これらの N 文字がリングに組み込まれている場合、暗号化プロセスは N を法とするプロセス、つまり C(i)=(K(i) P( i))modN。ここで、K、C、P はそれぞれキー空間、暗号文空間、メッセージ (平文) 空間を表します。
インターネット上の一部の人はこの暗号化アルゴリズムを C で実装しており、ほとんどすべてが参照および置換テーブル方式を使用しています。置換テーブルはプログラムで生成できますが、生成された置換テーブルは規則的すぎます。私は Javascript を使用してモジュールメソッドを使用して以下を実装しました。これはより柔軟で、確実にスペースが少なくなります (時間効率はまだ見積もっていません)
var rlt = '';
var ループ = 0; for(loop=0; ループ
if(iP==-1) return 'このアルゴリズムは現在、文字を暗号化できません: 'P.charAt(loop)';
var iK = Vigenere._strCpr.indexOf(K. charAt (loop));
if(iK==-1) return 'キーに不正な文字が含まれています:' K.charAt(loop);
var i = (iP iK) % Vigenere.lenCpr;
rlt = rlt Vigenere._strCpr.charAt(i);
}
return
};
Vigenere.DisEncrypt = function(K,C){
K = Vigenere._strKey(K,C);
var lenK = K.length;
var rlt = '';
for(loop=0; ループ
if(iK==- 1) return 'キーに不正な文字が含まれています:' K.charAt(loop); var iC = Vigenere._strCpr.indexOf(C.charAt(loop));
if(iK > iC){
rlt = Vigenere._strCpr.charAt(iC Vigenere.lenCpr - iK);
}
else{
rlt = Vigenere._strCpr.charAt(iC - iK);
}
}
return rlt;
};