独自のシーザー暗号エンコーダーの書き方
シーザー暗号について聞いたことがありますか ?
ジュリアスシーザーはこのテクニックを使用して、敵からの秘密のメッセージを隠しました!
シーザー暗号は、最も原始的な暗号化技術の1つです。
このシステムの背後にある主なアイデアは、文字を回転させることです。 x個のアルファベット上の位置 。
たとえば、x = 1
の場合 、「A」は「B」になり、「C」は「D」になります。
では、これをコードでどのように実装するのでしょうか?
よろしくお願いします。見た目ほど難しくはないことがわかりました。文字は数字(ASCIIコード)で表すことができるという事実を利用します。これにより、2つの数字を足し合わせるだけで、文字を回転させることができます。
独自のシーザー暗号コンバーターの作成
まず、入力文字列を整数配列に変換します。
ascii = "test".chars.map(&:ord)
これを分解しましょう :
文字 メソッドは文字列を文字の配列に分割し、列挙子を返します。その結果、地図を呼び出すことができます アレイ上。
mapメソッドは、配列のすべての要素を何らかの方法で変換する場合に非常に便利です。 マップの戻り値 変換された要素を持つ別の配列です。
注:この構文にはRuby 1.9以降が必要であり、次と同等です:
ascii = "test".chars.map { |c| c.ord }
すべての文字を対応するASCII値に変換したいので、 ordと呼びます。 配列のすべての要素のメソッド。
この例では、出力は次のようになります。
[116, 101, 115, 116]
回転時間
すばらしい!
次のステップは、必要な回転数を追加することです。これは、マップを使用して行うことができます もう一度:
shifted = ascii.map { |c| c + 5 } => [121, 106, 120, 121]
これで、数字を文字に戻して結合すると、暗号化された文字列が得られます:
shifted.map { |c| c.chr }.join => "yjxy"
元の文字列を取得するには、同じ手順を再度適用するだけですが、今回は左にシフトします。
最初に使用したのと同じ量の位置でシフトすることが重要です。そうしないと、元のデータを復元できません。
最終コードと代替バージョン
完成したシーザー暗号コードはここにあります。
特定の文字列に対して可能な26の反復すべてを生成し、ラッピングも処理します(投稿の例では処理されません)。
Array#rotate
を使用する代替バージョンもあります
次のこともお勧めします:
Ruby文字列のフォーマット
-
Rubyの関数とメソッド:独自の関数を定義する方法
Rubyメソッドとは何ですか? メソッドは、特定の目的のためにグループ化された1行または複数行のRubyコードです。 このグループ化されたコードには名前が付けられているため、コードを再度記述したり、コピーして貼り付けたりすることなく、いつでも使用できます。 メソッドの目的は次のとおりです : 情報を取得します。 オブジェクトを変更または作成します。 フィルターとフォーマットのデータ。 例1 : サイズ Arrayのメソッド オブジェクトは要素の数を示します(情報を取得します)。 例2 : pop メソッドは、配列から最後の要素を削除します(オブジェクトを変更します)。
-
独自のブラウザ拡張機能の作成方法 [サンプル プロジェクトを含む]
この記事では、ブラウザーの拡張機能について説明します。拡張機能とは何か、どのように機能するのか、独自の拡張機能を構築する方法について説明します。 最後に、ボタンを 1 回クリックするだけで任意のコード スニペットをクリップボードにコピーできる独自の拡張機能を実際に作成します (非常に楽しい!)。 この記事を続けるには: JavaScript の基本的な知識が必要です。 Firefox ブラウザが必要です (または他のブラウザでも動作します) ブラウザ拡張機能とは? ブラウザ拡張機能は、ブラウザに追加するもので、ブラウザの容量を拡張してブラウジング エクスペリエンスを向上させます。