Vigenere 暗号アルゴリズムの JavaScript 実装 example_javascript スキル

WBOY
リリース: 2016-05-16 17:13:11
オリジナル
2308 人が閲覧しました

従来の暗号化テクノロジは、今日のネットワーク セキュリティにおいて大きな役割を果たすことはできませんが、暗号化と暗号化の歴史の基礎であるため、暗号化に関するすべての本の冒頭で紹介されます。ヴィジェネレ暗号に関する章のほぼすべての暗号学の本には、ヴィジェネレ暗号のメカニズムを説明する「ヴィジェネレ置換テーブル」が記載されています:

Vigenere 暗号アルゴリズムの JavaScript 実装 example_javascript スキル

暗号化プロセスは非常に単純です。つまり、鍵文字 x と平文文字 y が与えられると、暗号文文字は x 行と y 列にある文字になります。これにより、メッセージの暗号化には、通常、キー文字列がキーワードの繰り返しである限り、キー文字列が必要であることが決まります。
この記事では、「暗号化とネットワーク セキュリティ - 原則と実践」の例を例として使用します。たとえば、キーワードが欺瞞的で、メッセージが「発見されました。自分自身を保存してください」である場合、暗号化プロセスは次のようになります:

コードをコピーします コードは次のとおりです:

deceptivedeceptivedeceptive(キー文字列)
weareddiscoveredsaveyourself (メッセージ)
ZICVTWQNGRZGVTWAVZHCQYGLMGJ (暗号文)

暗号文の最初の文字「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 Vigenere = {
_strCpr: 'abcdefghijklmnopqrstuvwxyz_12345 67890.ABCDEFGHIJKLMNOPQRSTUVWXYZ',//この文字列の順序を変更したり、文字を追加したりできます
_strKey: function(strK,str ){//キー文字列を生成します。strK はキー、str は平文または暗号文です
var lenStrK = strK.length;
var lenStr = str.length;
if(lenStrK != lenStr ) {//キーの長さは STR とは異なるため、キー文字列
while(lenStrK < lenStr){
strK = strK strK;
lenStrK = 2 * lenStrK;
}
}//このとき、キー文字列の長さは str
の長さ以上ですを使用して を使用して を使用して使用する 使用する 使用する 使用する 使用する 使用する 使用する 使用する 使用する 使用する 使用する 使用する 使用する 使用する 使用する 使用する 使用するthrough out out out out out out through out out through out outallow out の ' s ' through ' through ‐ to ‐ ‐ ‐ n r r‐ and 🎜>}

Vigenere.lenCpr = Vigenere._strCpr.length;

Vigenere.Encrypt = function(K,P){//暗号化アルゴリズム、K はキー、P は平文
K = Vigenere._strKey(K,P); var lenK = K.長さ ;

var rlt = '';

var ループ = 0;

for(loop=0; ループ var iP = Vigenere._strCpr.indexOf(P.charAt (loop));
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 = '';

var ループ = 0;

for(loop=0; ループ var iK = Vigenere._strCpr.indexOf(K.charAt(loop));
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;
};


ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート