期間の終わりまでに、情報セキュリティの宿題の紹介を見ていきます。たまたま、古典的な暗号アルゴリズムでプレイフェアアルゴリズムとヒルアルゴリズムに遭遇しました。 JavaScript言語で実装することは興味深いです。エンコード中にBaiduをチェックしてから、JavaScriptの基本に関する優れたチュートリアルを提供します。
プレイフェア
PlayFairパスワード(英語:PlayFair暗号またはPlayFair Square)は、置換パスワードです。 5*5の正方形の暗号テーブルに基づいて書かれ、25文字がテーブルに配置されています。英語の26文字については、最も一般的に使用されるzを削除してパスワードテーブルを形成します。
実装のアイデア:
1。パスワードリストを準備します
キーは単語またはフレーズであり、パスワードテーブルはユーザーから指定されたキーに基づいて整理されています。重複した文字がある場合は、その後重複した文字を削除できます。
たとえば、キークレイジードッグは
| c | o | h | m | t |
| r | g | 私 | n | u |
| a | b | j | p | v |
| y | e | k | Q | w |
| d | f | l | s | x |
コードコピーは次のとおりです。
/*
*関数:パスワードリストのコンパイル
*
*パラメーター:キー(スペースの削除と大文字処理)
*
*戻り:パスワードテーブル
*/
関数CreateKey(keychars){
//アルファベットアレイ
var allchars = ['a'、 'b'、 'c'、 'd'、 'e'、 'f'、 'g'、h '、' i '、' j '、' k '' '' ''、 'n'、 'o'、 'P'、 'q'、 's'、 't'、 'u' ''
//可変キーチャーズアルファベットのテーブルに文字の位置を取得し、文字を削除します
for(var i = 0; i <keychars.length; i ++){
var index = allchar.indexof(keychars [i]);
if(index> -1){
allchar.splice(index、1);
}
}
//キーチャーの文字をアルファベットに挿入します
for(var i = keychars.length-1; i> = 0; i-){
allchars.unshift(keychars [i]);
}
//最初の列からキーチャールをパスワードテーブルに挿入します
for(var i = 0; i <5; i ++){
for(var j = 0; j <5; j ++){
key [j] [i] = allchars [i*5+j];
}
}
}
キーチャールをパスワードテーブルに挿入するときに、重複した文字とzを削除する必要があることを考慮すると、デザインアルゴリズムは次のとおりです。
コードコピーは次のとおりです。
/*
*関数:文字列から複製文字を削除します
*
*パラメーター:処理する必要がある文字列
*
*戻り:処理された文字列
*/
function remodeveduplicate(str){
var result = []、tempstr = "";
var arr = str.split( ''); //文字列を配列に分割します
//arr.sort();//sorting
for(var i = 0; i <arr.length; i ++){
var repeatback = true; //デザイン変数は、次のアルゴリズムが同じ文字が一緒に接続されていることのみを確実にすることができるため、文字列の前の部分が同じ文字に存在しないことを確認することです。
for(var j = 0; j <result.length; j ++){
if(arr [i] == result [j])
repeatback = false;
}
if(arr [i]!== tempstr && repeatback){
result.push(arr [i]);
tempstr = arr [i];
}それ以外{
続く;
}
}
return result.join( ""); //配列を文字列に変換します
}
2。クリアテキストを整理します
プレーンテキストの2文字のペアを作成します。ペアで隣に2つの同一の文字がある場合、または最後の文字が単一である場合は、文字Xを挿入します。コーディングの初期段階で、彼は考慮されず、文字の数を単数形として入力することを拒否しました。
var k = document.getElementById( "keychars")。value.touppercase()。falplea(// s/ig、 '');
スペースを削除し、プレーンテキストの大文字に変換します。
3.暗号テキストを書きます
プレーンテキスト暗号化ルール(Baiduから):
1)P1 P2が同じラインにある場合、対応する暗号文C1 C2はP1 P2の右端に近い文字です。最初の列は、最後の列の右側と見なされます。たとえば、前の表によると、CTはOCに対応しています
2)P1 P2が同じ列にある場合、対応する暗号文C1 C2はP1 P2のすぐ下の文字です。最初の行は、最後の行の下と見なされます。
3)P1とP2が同じ行で同じ列にない場合、C1とC2は、P1とP2によって決定される長方形の他の2つのコーナーの文字です(水平交換または垂直置換に関しては、事前に予約するか、自分で試してみてください)。前の表に従って、WHはTKまたはKTに対応します。
たとえば、上記の表、生命がある平易なテキストによると、希望があります。
あなたは最初にそれを整理することができます
次に、ciphertextは次のとおりです。
ciphertextをキャピタルに変えてから、複数の文字のグループに配置します。
たとえば、5のグループでは、ktygw ookgy nlhjo fcmyg kglmm bwf
4。復号化
5*5マトリックスを入力し(繰り返し文字と文字zを繰り返します)、マトリックスの残りの位置でマトリックスの残りの位置を順に記入し、置換マトリックスに従って暗号文からプレーンテキストを取得します。反対のことをします。
効果は図に示されているとおりです。
丘
ヒルパスワードは、基本的なマトリックス理論の原理を使用する置換パスワードです。 5*5の正方形の暗号テーブルに基づいて書かれ、25文字がテーブルに配置されています。英語の26文字については、最も一般的に使用されるzを削除してパスワードテーブルを形成します。
実装のアイデア:
1。アルファベットを書きます
var chars = ['a'、 'b'、 'c'、 'd'、 'e'、 'f'、 'g'、h '、' i '、' j '、' k '、' l '、' n '、' o '、' p '、' q、 'r'、 's'、 't' '' u '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' y ''、
2。キーをランダムに生成します
コードコピーは次のとおりです。
/*
*関数:キーをランダムに生成します
*
*戻り:キーマトリックス
*/
function randomcreatekey(){
// 0から26までの数値をランダムに生成します
for(var i = 0; i <3; i ++){
for(var j = 0; j <3; j ++){
key [i] [j] = math.round(math.random()*100%26)
}
}
}
3.キーコード、自動生成されたキーに基づいてプレーンテキストを処理します。
コードコピーは次のとおりです。
/*
*関数:ヒルアルゴリズム
*
*パラメーター:長さ3の倍数を備えた大文字アレイ
*
*戻り:暗号化された文字列
*/
function Hill(p){
//大文字の文字暗号テキスト
var res = "";
//文字列を通過する必要がある合計回数を開発する
var round = math.round(p.length/3);
//対処する
for(var b = 0; b <round; b ++){
//プレーンテキスト3
var temp3 = "";
var temparr3 = [];
var sumarr3 = [];
for(var i = 0; i <3; i ++){
temp3 += p.shift();
for(var j = 0; j <chars.length; j ++){
if(temp3 [i] == chars [j])
temparr3 [i] = j;
}
}
//計算します
for(var i = 0; i <3; i ++){
for(var j = 0; j <3; j ++){
sumarr3 [i] =(temparr3 [j]*key [i] [j])%26;
}
}
//アルファベットで対応する文字のインデックスを取得します
for(var i = 0; i <3; i ++){
res += chars [sumarr3 [i]];
}
}
RESを返します。
};
効果は図に示されているとおりです。
上記のアルゴリズムには欠点があります。
1。プロセス指向設計、高い結合度
2.ネストされたループが多すぎる、アルゴリズムの効率を最適化する必要があります
3。ユーザーが非アルファベット文字に入力したときに処理しないなど、可能な状況を考慮してください。
要約:
一定期間、情報セキュリティのコース紹介を研究した後、情報セキュリティの基本しか理解できません。情報セキュリティは非常に興味深いテーマです。いくつかの問題に遭遇したら、可能な限り考え、もっとやり、より多くを使用してください。同時に、数学的基盤の蓄積を強化し、JS財団を統合し、知識を広げる必要があります。この道には長い道のりがあります。