Rubyでシーザー暗号のプログラムを作りました。
補足
- まだ暗号化するだけの処理です。
- 英大文字のみ対応です。
- スペースなどは考慮していません。
シーザー暗号とは
平文の各文字を辞書順にずらして暗号文にする暗号です。
プログラム
def caesar_cipher(string = "ABC", shift = 3)
charArray = string.chars.map(&:ord)
charArray.map do |char|
if (char + shift) < 91
(char + shift).chr
else
(char + shift - 26).chr
end
end.join
end
puts caesar_cipher
処理の流れ
- 暗号化したい文字列を用意する
- 文字列を1文字ずつに分ける
- 分けた文字を文字コードに変換する
- 任意の数分だけ文字コードを辞書順にずらす
- 得られた文字コードを文字に戻す
- 1つの文字列に結合して暗号文とする
終わりに
charArray.map
に渡しているブロックの終わりにjoin
で繋げるのは新しい発見でした。でも可読性の低下と、バグの原因になりそうなのであまり多用しないほうがいい気がします。
それにしても文字コードの操作は「プログラムを組んでる」という感じが強くて面白いですね。
参考