前回のプログラムでは、ずらす数字を変更した場合、テーブルの文字を全部書き換える必要があります。
今回はアルファベットに数字を対応させてみます。
#シーザー暗号 table = [["a",1],["b",2],["c",3],["d",4],["e",5], ["f",6],["g",7],["h",8],["i",9],["j",10], ["k",11],["l",12],["m",13],["n",14],["o",15], ["p",16],["q",17],["r",18],["s",19],["t",20], ["u",21],["v",22],["w",23],["x",24],["y",25], ["z",26],[" ",27]] key = 3#文字をずらす数 a = "I love Ruby" a = a.downcase i = a.length encryption = '暗号化した文=' for x in 0..(i-1) do count = 0 while table[count][0] != a[x].chr count += 1 end suzi = table[count][1]#アルファベットに対応する数字を取得 crypt = (suzi + key) % 27#keyの値だけ数字をシフト #crypt = (suzi - key) % 27#復号化用 encryption += table[crypt-1][0]#シフト先アルファベット取得#[crypt-1]で-1してるのは配列が0から始まるため end puts encryption
前回と今回のプログラムは以下のページを参考にさせて頂きました。
Tiny Basic for Windows
「Topページ」-「プログラムの背景」-「カエサル暗号」に詳しい説明があります。
「crypt = (suzi + (key)) % 27」の計算部分について説明があるので、お勧めです。
最近のコメント