Javascript小僧:鍵付き換字式+転置式暗号【コード編:機密情報伝達】 [コンピューター]
今回は、正しいパスワードを入力したときのみ機密情報を表示するためのHTML+Javascriptを紹介します。Javascriptには、暗号化したパスワードと機密情報を埋め込んでおきます。
このコードをブラウザで開くと、
のようになります。
・「解錠」ボタンを押すと、パスワードを聞いてきます。正しいパスワードを入力したときのみ、「******」が復号された機密情報が表示されます。
・「初期化」ボタンを押すと、機密情報を「******」に戻します。
・myOpen01関数にパスワードと機密情報の暗号文字列、鍵文字列、転置文字数を設定します。上記のコードでは、以下の値を設定しています。ですので、パスワードにcheese999を入力すると、機密情報としてmach55577が開示されます。
・パスワード
・元文字列:cheese999
・鍵文字列:hogehoge1
・転置文字数:3
・暗号文字列:EJYfuqgvB
・機密情報
・元文字列:mach55577
・鍵文字列:KureKure2
・転置文字数:5
・暗号文字列:RbV7BI3p5
Javascript小僧:鍵付き換字式+転置式暗号【コード編:暗号化】
http://cheese999.blog.so-net.ne.jp/2013-05-02
Javascript小僧:鍵付き換字式+転置式暗号【目的編】
http://cheese999.blog.so-net.ne.jp/2013-05-01
<html> | |||||
<title>機密情報</title> | |||||
<head lang="ja"> | |||||
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> | |||||
<script type="text/javascript"> | |||||
<!-- | |||||
// 初期化 | |||||
function myInit01(){ | |||||
document.getElementById("IDKimitsu01").value="*********"; | |||||
} | |||||
// 復号 | |||||
function myFukugou2(Str3,Str2,Num1){ | |||||
var str1=""; // 元文字列 | |||||
// 【暗号文字列を転置(逆スライド)】 | |||||
var str3=myRotate1(Str3,(Str3.length-Num1)); | |||||
// 【1文字ずつ配列に格納】 | |||||
var str3_1=str3.split(''); // 暗号文字 | |||||
var str2_1=Str2.split(''); // 鍵文字 | |||||
var str1_1=str3.split(''); // 元文字(仮で暗号文字列を代入) | |||||
// 【元文字列を計算】 | |||||
var myCharNm1=0; | |||||
var myCharNm2=0; | |||||
var myCharNm3=0; | |||||
var i=0; | |||||
for(i=0;i<str3_1.length;i++){ | |||||
myCharNm3=myCharNum1(str3_1[i]); // 暗号文字の番号 | |||||
myCharNm2=myCharNum1(str2_1[i]); // 鍵文字の番号 | |||||
myCharNm1=myCharNm3-myCharNm2; // 元文字の番号 | |||||
if(myCharNm1<1){myCharNm1+=62} // 1より小さければ、62を足す | |||||
str1_1[i]=myNumChar2(myCharNm1); // 元文字 | |||||
str1+=str1_1[i]; // 元文字列 | |||||
} | |||||
return (str1) | |||||
} | |||||
// 【文字列を転置(スライド)】 | |||||
str3=myRotate1(str3,Num1); | |||||
return (str3) | |||||
} | |||||
// 文字から文字の番号を得る | |||||
function myCharNum1(Char1){ | |||||
// 【文字⇒ASCIIコード変換】 | |||||
var num1=Char1.charCodeAt(0); | |||||
// 【ASCIIコード⇒文字の番号変換】 | |||||
// A:65(0x41)⇒1 | |||||
// Z:90(0x5A)⇒26 | |||||
if((num1>=65)&&(num1<=90)){ | |||||
return (num1-64) | |||||
// a:97(0x61)⇒27 | |||||
// z:122(0x7A)⇒52 | |||||
}else if((num1>=97)&&(num1<=122)){ | |||||
return (num1-70) | |||||
// 0:48(0x30)⇒53 | |||||
// 9:57(0x39)⇒62 | |||||
}else if((num1>=48)&&(num1<=57)){ | |||||
return (num1+5) | |||||
}else{ | |||||
return (1) // A | |||||
} | |||||
} | |||||
// 文字の番号から文字を得る | |||||
function myNumChar2(num1){ | |||||
var num2=0; | |||||
// 【文字の番号をASCIIコードに変換】 | |||||
// A:1⇒65(0x41) | |||||
// Z:26⇒90(0x5A) | |||||
if((num1>=1)&&(num1<=26)){ | |||||
num2=num1+64 | |||||
// a:27⇒97(0x61) | |||||
// z:52⇒122(0x7A) | |||||
}else if((num1>=27)&&(num1<=52)){ | |||||
num2=num1+70 | |||||
// 0:53⇒48(0x30) | |||||
// 9:62⇒57(0x39) | |||||
}else if((num1>=53)&&(num1<=62)){ | |||||
num2=num1-5 | |||||
}else{ | |||||
num2=65 // A | |||||
} | |||||
// 【ASCIIコードを文字に変換】 | |||||
return (String.fromCharCode(num2)); | |||||
} | |||||
// 文字列を指定文字数分、転置(スライド)する。 | |||||
function myRotate1(Str1, Num1){ | |||||
// 【引数】 | |||||
// Str1 : 文字列 | |||||
// Num1 : スライドする文字数 | |||||
// 【文字列を配列に格納】 | |||||
var str1_1=Str1.split(''); // 元文字列 | |||||
var str2_1=Str1.split(''); // 転置(スライド)後の文字列 | |||||
// 【指定文字数の確認、修正】 | |||||
var num2=Num1; | |||||
// 指定文字数が文字列長より小さくなるまで文字列長を引く | |||||
while(num2>str1_1.length){num2-=str1_1.length} | |||||
// 指定文字数がマイナスだったら、符号をプラスにする | |||||
if(num2<0){num2=0-num2} | |||||
// 【転置(スライド)】 | |||||
var i=0; | |||||
var j=0; | |||||
var str2=""; | |||||
for(i=0;i<str1_1.length;i++){ | |||||
// 転置後の文字を格納する配列の添字 | |||||
j=i+num2; | |||||
// 文字列長以上だったら、文字列長を引く | |||||
if(j>=str1_1.length){j-=str1_1.length} | |||||
// 転置 | |||||
str2_1[j]=str1_1[i] | |||||
} | |||||
// 【転置後の文字列を生成】 | |||||
for(i=0;i<str2_1.length;i++){ | |||||
str2+=str2_1[i] | |||||
} | |||||
return (str2) | |||||
} | |||||
// 機密情報の開示 | |||||
function myOpen01(){ | |||||
var Ans1=prompt("パスワードを入力してください",""); | |||||
var Pass1=myFukugou2("EJYfuqgvB","hogehoge1",0); | |||||
Pass1=myFukugou2(Pass1,"hogehoge1",3); | |||||
if(Ans1==Pass1){ | |||||
var Kimitsu1=myFukugou2("RbV7BI3p5","KureKure2",0); | |||||
Kimitsu1=myFukugou2(Kimitsu1,"KureKure2",5); | |||||
document.getElementById("IDKimitsu01").value=Kimitsu1; | |||||
}else{ | |||||
document.getElementById("IDKimitsu01").value="*********"; | |||||
alert( "パスワードが違います!" ); | |||||
} | |||||
} | |||||
// --> | |||||
</script> | |||||
</head> | |||||
<body onload="myInit01()"> | |||||
<h1>機密情報</h1> | |||||
<table border="0"><tr> | |||||
<td><form name="myF06"><input type="text" id="IDKimitsu01" | |||||
value="*********"></form></td> | |||||
</tr></table> | |||||
<br> | |||||
<div align="right"> | |||||
<table border="0"><tr> | |||||
<td><form name="myB01" action="#"> | |||||
<input type="button" value="解錠" onclick="myOpen01()"> | |||||
<input type="button" value="初期化" onclick="myInit01()"> | |||||
</form></td> | |||||
</tr></table></div> | |||||
</body> | |||||
</html> |
このコードをブラウザで開くと、
のようになります。
・「解錠」ボタンを押すと、パスワードを聞いてきます。正しいパスワードを入力したときのみ、「******」が復号された機密情報が表示されます。
・「初期化」ボタンを押すと、機密情報を「******」に戻します。
・myOpen01関数にパスワードと機密情報の暗号文字列、鍵文字列、転置文字数を設定します。上記のコードでは、以下の値を設定しています。ですので、パスワードにcheese999を入力すると、機密情報としてmach55577が開示されます。
・パスワード
・元文字列:cheese999
・鍵文字列:hogehoge1
・転置文字数:3
・暗号文字列:EJYfuqgvB
・機密情報
・元文字列:mach55577
・鍵文字列:KureKure2
・転置文字数:5
・暗号文字列:RbV7BI3p5
Javascript小僧:鍵付き換字式+転置式暗号【コード編:暗号化】
http://cheese999.blog.so-net.ne.jp/2013-05-02
Javascript小僧:鍵付き換字式+転置式暗号【目的編】
http://cheese999.blog.so-net.ne.jp/2013-05-01
nice! ありがとうございます。[__猫]
by cheese999 (2013-05-06 05:31)