1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

シーザー暗号を使って、splitメソッド、ordメソッド、chrメソッド、joinメソッドの勉強

Posted at

この記事で得られる知識

Rubyで、入力された文字列をシーザー暗号で暗号化し、暗号化された文字列を復号するプログラムを作ってみました。

① シーザー暗号とは
② splitメソッドの使い方。
③ ordメソッド、chrメソッドの使い方。
④ joinメソッドの使い方。

シーザー暗号とは

決まった文字数分のアルファベットをシフトさせて作られる暗号。
例えば"study"という文字列を、シーザー暗号で前方に3つシフトさせて
暗号化すると"pqrav"という暗号文ができる。
シーザー番号 wikipedia

splitメソッド、ordメソッド、chrメソッド、joinメソッドを使って書いてみる

実装の流れは
1、入力された文字列を各文字に分割して配列に入れる。(splitメソッド)
2、配列に入れた各文字を暗号化する。(ordメドッド、chrメソッド)
3、暗号化され配列に入っている各文字を再び文字列に変換する。(joinメソッド)
となります。
ポイントは各文字には、文字コードという数字が与えられていることです。

qiita.rb
# 暗号化するためのメソッド
def encode(input)
  # ①入力された値を一文字ずつに分解して配列に入れるためにsplit("")を使用します。
  #   もし文字列"study"が入力されていれば配列chars_arrの中身は[s,t,u,d,y]になっています。
  chars_arr = input.split("")
  # ②new_charsで、each文で処理された値を受け取るための空の配列[]を準備します。
  new_chars = []

  chars_arr.each do |char|
    # ③ordメソッドを使い、各文字を文字コードに変換し、-3をすることで3つ手前の文字コードに変更します。
    # ④chrメソッドを使い、3つ手前の文字コードに変更された値を、再び文字に戻します。③④で暗号化しています。
    new_char = (char.ord - 3).chr
    # ⑤暗号化された文字列を②で準備した空の配列に入れます。
    new_chars << new_char
  end
  
  # ⑥暗号化され配列に入った各文字をjoinメソッドを使い、一つの文字列にしています。joinメソッドを使う前の
  # 配列new_charsの中身は[p,q,r,a,v]となっています
  puts new_chars.join
end

# 復号するためのメソッド  暗号化するためのメソッドと比べて
# new_char = (char.ord - 3).chr が  new_char = (char.ord + 3).chrとなっているだけでそのほかは同じです。
def decode(input)
  chars_arr = input.split("")
  new_chars = []
  chars_arr.each do |char|
    new_char = (char.ord + 3).chr
    new_chars << new_char
  end

  puts new_chars.join

end

while true do
  puts "番号を入力してください"
  puts "0: 文字列をシーザー番号(-3)で暗号化する"
  puts "   ※使用できる文字列はa~zの小文字"
  puts "1: シーザー暗号(-3)で暗号化された英字文字列を復号する"
  puts "   ※使用できる文字列はa~zの小文字"
  puts "2: 終了する"
  case gets.to_i
  when 0
    puts "シーザー暗号(+3)で暗号化したい文字列を入力してください"
    input = gets.chomp
    encode(input)
  when 1
    puts "復号したい文字列を入力してください"
    input = gets.chomp
    decode(input)
  when 2
    exit
  else
    puts '無効な値です'
  end  

end

ターミナルでの出力


番号を入力してください
0: 文字列をシーザー番号(-3)で暗号化する
   ※使用できる文字列はa~zの小文字
1: シーザー暗号(-3)で暗号化された英字文字列を復号する
   ※使用できる文字列はa~zの小文字
2: 終了する
0
シーザー暗号(-3)で暗号化したい文字列を入力してください
study
pqrav
番号を入力してください
0: 文字列をシーザー番号(-3)で暗号化する
   ※使用できる文字列はa~zの小文字
1: シーザー暗号(-3)で暗号化された英字文字列を復号する
   ※使用できる文字列はa~zの小文字
2: 終了する
1
復号したい文字列を入力してください
pqrav
study

無事、暗号化と復号ができるプログラムが出来上がりました。
読んでいただいてありがとうございました。

1
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?