JavaScript におけるシーザー暗号の実装

JavaScriptJavaScriptBeginner
今すぐ練習

This tutorial is from open-source community. Access the source code

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、シーザー暗号と呼ばれる単純な暗号化アルゴリズムを調べます。このアルゴリズムは、与えられた文字列の各文字をアルファベット順に特定の数だけシフトさせます。JavaScriptを使ってシーザー暗号を実装し、文字列操作と配列メソッドを組み合わせて、この手法を使ってメッセージを暗号化および復号化する方法を学びます。この実験は、JavaScriptのスキルを練習し、暗号化アルゴリズムをより深く理解する良い機会です。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL javascript(("JavaScript")) -.-> javascript/BasicConceptsGroup(["Basic Concepts"]) javascript(("JavaScript")) -.-> javascript/AdvancedConceptsGroup(["Advanced Concepts"]) javascript/BasicConceptsGroup -.-> javascript/variables("Variables") javascript/BasicConceptsGroup -.-> javascript/data_types("Data Types") javascript/BasicConceptsGroup -.-> javascript/arith_ops("Arithmetic Operators") javascript/BasicConceptsGroup -.-> javascript/comp_ops("Comparison Operators") javascript/BasicConceptsGroup -.-> javascript/cond_stmts("Conditional Statements") javascript/AdvancedConceptsGroup -.-> javascript/higher_funcs("Higher-Order Functions") javascript/AdvancedConceptsGroup -.-> javascript/spread_rest("Spread and Rest Operators") subgraph Lab Skills javascript/variables -.-> lab-28183{{"JavaScript におけるシーザー暗号の実装"}} javascript/data_types -.-> lab-28183{{"JavaScript におけるシーザー暗号の実装"}} javascript/arith_ops -.-> lab-28183{{"JavaScript におけるシーザー暗号の実装"}} javascript/comp_ops -.-> lab-28183{{"JavaScript におけるシーザー暗号の実装"}} javascript/cond_stmts -.-> lab-28183{{"JavaScript におけるシーザー暗号の実装"}} javascript/higher_funcs -.-> lab-28183{{"JavaScript におけるシーザー暗号の実装"}} javascript/spread_rest -.-> lab-28183{{"JavaScript におけるシーザー暗号の実装"}} end

シーザー暗号

シーザー暗号を使用するには、次の手順に従います。

  1. ターミナル/SSHを開き、コーディングの練習を始めるために node と入力します。
  2. 暗号化または復号化する文字列、シフト値、および復号化するかどうかを示すブール値を使って、caesarCipher 関数を呼び出します。
  3. caesarCipher 関数は、剰余演算子 (%) と三項演算子 (?) を使って、正しい暗号化または復号化キーを計算します。
  4. 展開演算子 (...) と Array.prototype.map() を使って、与えられた文字列の文字を反復処理します。
  5. String.prototype.charCodeAt()String.fromCharCode() を使って、特殊文字、空白などを無視して、各文字を適切に変換します。
  6. Array.prototype.join() を使って、すべての文字を1つの文字列に結合します。
  7. 暗号化された文字列を復号化したい場合は、caesarCipher 関数を呼び出す際に、最後のパラメータである decrypttrue を渡します。

以下は、caesarCipher 関数のコードです。

const caesarCipher = (str, shift, decrypt = false) => {
  const s = decrypt ? (26 - shift) % 26 : shift;
  const n = s > 0 ? s : 26 + (s % 26);
  return [...str]
    .map((l, i) => {
      const c = str.charCodeAt(i);
      if (c >= 65 && c <= 90)
        return String.fromCharCode(((c - 65 + n) % 26) + 65);
      if (c >= 97 && c <= 122)
        return String.fromCharCode(((c - 97 + n) % 26) + 97);
      return l;
    })
    .join("");
};

以下は、caesarCipher 関数の使用例です。

caesarCipher("Hello World!", -3); // 'Ebiil Tloia!'
caesarCipher("Ebiil Tloia!", 23, true); // 'Hello World!'

まとめ

おめでとうございます!あなたはシーザー暗号の実験を完了しました。あなたのスキルを向上させるために、LabExでさらに多くの実験を行って練習することができます。