Ruby
 Computer >> コンピューター >  >> プログラミング >> Ruby

Rubyで学ぶ!シーザー暗号エンコーダーの自作方法

シーザー暗号(Caesar cipher)をご存知ですか?

これは、ユリウス・カエサルが敵に知られないよう秘密のメッセージを隠すために実際に使った暗号化手法です。

シーザー暗号は、最も原始的な暗号技術の一つとされています。

その仕組みの核心は、アルファベットの文字をx個分だけずらす(ローテートする)というシンプルなアイデアにあります。

例えば x = 1 の場合、「A」は「B」に、「C」は「D」に変換されます。以下同様です。

Rubyで学ぶ!シーザー暗号エンコーダーの自作方法

では、これをコードで実装するにはどうすればよいのでしょうか?

答えは意外と簡単です。文字は数値(ASCIIコード)として表現できるという事実を利用すれば、文字の回転処理は単なる「2つの数値の足し算」で実現できます。

シーザー暗号コンバーターを自作してみよう

まずは、入力された文字列を整数の配列に変換することから始めます。

ascii = "test".chars.map(&:ord)

このコードを分解して見てみましょう:

charsメソッドは、文字列を1文字ずつに分割した配列を返します。その結果として、配列に対してmapメソッドを呼び出せるようになります。

mapメソッドは、配列の全要素を何らかの形で一括変換したい場合に非常に便利です。mapの戻り値は、変換後の要素を持つ新しい配列になります。

注:この構文にはRuby 1.9以降が必要です。以下のコードと同等の意味を持ちます。

ascii = "test".chars.map { |c| c.ord }

すべての文字を対応するASCII値に変換したいので、配列の各要素に対してordメソッドを呼び出します。

この例では、出力は次のようになります。

[116, 101, 115, 116]

いよいよ回転(シフト)処理

ここまで順調に進んでいますね!

次のステップは、希望する回転数を各数値に加算することです。これもmapを使えば簡単に実現できます。

shifted = ascii.map { |c| c + 5 }
=> [121, 106, 120, 121]

あとは、数値を再び文字に戻して連結(join)すれば、暗号化された文字列が完成します。

shifted.map { |c| c.chr }.join
=> "yjxy"

元の文字列を復元するには、同じ手順を今度は左方向へシフトして適用するだけです。

ここで重要なのは、最初に使ったのと同じだけの位置数でシフトすることです。シフト量が異なると、元のデータを正しく復元できなくなります。

完成版コードと別バージョンについて

完成したシーザー暗号のコードはこちらから確認できます。

このコードは、指定された文字列に対して26通りすべてのシフトパターンを生成し、さらにラップ処理(アルファベット末尾「Z」から「A」への折り返し)にも対応しています(本記事の例ではこの処理は省略しています)。

また、Array#rotateを使用した別バージョンの実装も用意されています。

合わせて読みたい記事:
Rubyの文字列フォーマット入門

  1. Rubyのメソッド入門:defキーワードで独自のメソッドを定義する方法

    Rubyにおける「メソッド」とは、特定の目的のためにひとまとめにされた、1行以上のRubyコードのことです。 このコードのまとまりには名前が付けられており、一度定義してしまえば、同じコードを何度も書いたりコピー&ペーストしたりすることなく、必要なときにいつでも再利用できます。 メソッドの主な役割 メソッドの目的は、大きく分けて以下のようなものがあります。 情報を取得する オブジェクトを変更・生成する データをフィルタリング・整形する 具体例 例1: Arrayオブジェクトに対するsizeメソッドは、配列内の要素数を返します(情報の取得)。 例2: popメソッドは、配列から最後の要素を取り

  2. ブラウザ拡張機能の作り方を徹底解説【サンプルプロジェクト付き】

    この記事では、ブラウザ拡張機能とは何か、どのように動作するのか、そして自分でオリジナルの拡張機能を作る方法について解説します。記事の最後には、実際に「ワンクリックでコードスニペットをクリップボードにコピーできる」拡張機能を作成します。とても楽しい内容ですよ!この記事を読み進めるには、以下が必要です。JavaScriptの基本的な知識Firefoxブラウザ(他のブラウザでも可)ブラウザ拡張機能とは?ブラウザ拡張機能とは、ブラウザに追加することでその機能を拡張し、閲覧体験を向上させるツールのことです。例えば、デバイスにインストールした広告ブロッカーを思い浮かべてください。Webを閲覧する際に広告を