第12回の目標:プログラミングを通して暗号化について理解を深める。
データを特別な知識なしでは読めないような形に変換することを暗号化という。暗号化されたデータに対して、暗号化されていないデータを平文ということがある。
暗号化されたデータを元に戻すことを復号という。
暗号化/復号に使うデータや手順を鍵という。
鍵が無くても読めてしまう暗号化には意味がなく、実用的な暗号化には数学的な理論を背景に持つ複雑なアルゴリズムが用いられる。
今回は(現代では実用的ではない)簡単な暗号化/復号を扱う。ルールは以下である
コンピュータに計算させるので、人間がすべてを把握する必要がないが、今回使うdictionary配列の中身は以下である。
["あ", "い", "う", "え", "お", "か", "が", "き", "ぎ", "く", "ぐ", "け", "げ", "こ", "ご", "さ", "ざ", "し", "じ", "す", "ず", "せ", "ぜ", "そ", "ぞ", "た", "だ", "ち", "ぢ", "つ", "っ", "づ", "て", "で", "と", "ど", "な", "に", "ぬ", "ね", "の", "は", "ば", "ぱ", "ひ", "び", "ぴ", "ふ", "ぶ", "ぷ", "へ", "べ", "ぺ", "ほ", "ぼ", "ぽ", "ま", "み", "む", "め", "も", "や", "ゃ", "ゆ", "ゅ", "よ", "ょ", "ら", "り", "る", "れ", "ろ", "わ", "を", "ん", "A", "B", "C"];
数値が等しいかどうか判定するには==を用いた。
let x = 0;
let y = 0;
if (x == 10) {
y = 100;
} else {
y = 200;
}
上の例では、yに200が代入される。
let x = "きのこ";
let y = 0;
if (x == "きのこ") {
y = 100;
} else {
y = 200;
}
文字列の比較も==で行うことができる。上の例では、yに100が代入される。
文字列を一文字ずつに分解するには次のようsplit関数を使う。
let x, myStr, myArr;
myStr = "まいう";
myArr = myStr.split('');
x = myArr.length;
上の処理によりmyArr には ["ま","い","う"] が代入される。split関数に渡しているパラメータは空文字列であり、これは全部バラバラにしろという意味である。また、配列の長さは4行目のように配列名.lengthで取得できる。この例ではxに3が代入される。
例題1 今回の暗号化のルールで文字列「ほし」を暗号化するとどうなるか
例題2 今回の暗号化のルールで文字列「ぎき」を復号するとどうなるか
例題3 パラメータとして文字列を受け取り、今回の暗号化のルールで暗号化した文字列を返す関数myEncryptを定義せよ。
例題4 パラメータとして文字列を受け取り、今回の暗号化のルールで復号した文字列を返す関数myDecryptを定義せよ。