前回のプログラムでは、ずらす数字を変更した場合、テーブルの文字を全部書き換える必要があります。
今回はアルファベットに数字を対応させてみます。
#シーザー暗号
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」の計算部分について説明があるので、お勧めです。
最近のコメント