HOWTO · Java

Java のシーザー暗号

このチュートリアルでは、Java で CaesarCipher を使用して暗号化と復号化を実行する方法を示します。

Caesar Cipher は、暗号化を実行するための最も簡単な方法の 1つです。このチュートリアルでは、Java で CaesarCipher を使用して暗号化と復号化を実行する方法を示します。

Java のシーザー暗号

Caesar Cipher は、暗号化を実行するための最も初期のアプローチです。任意のプログラミング言語で実装できます。アルゴリズムは単純です。たとえば、テキスト delftstack に対して暗号化を実行すると、Caesar Cipher アルゴリズムは、文字をアルファベット順に文字の下の固定位置に置き換えることによってテキストを暗号化します。

文字を暗号化する際にいくつの位置を下げるかを決定するために、整数であるキーを渡します。

たとえば、テキストが ABCD でキーが 2 の場合、暗号化されたテキストは CDEF になります。CaesarCipher 暗号化アプローチを Java で実装してみましょう。

Java でのシーザー暗号暗号化

以下のコードは、Java での CaesarCipher 暗号化の実装を示しています。

package delftstack;

import java.util.Scanner;

public class Caesar_Cipher_Encrypt {
  public static void main(String... s) {
    String Original_Message, Encrypted_Message = "";
    int Cipher_Key;
    char Message_Char;
    Scanner sc = new Scanner(System.in);
    System.out.println("Please enter a message: ");
    Original_Message = sc.nextLine();
    System.out.println("Enter the key: ");
    Cipher_Key = sc.nextInt();

    for (int i = 0; i < Original_Message.length(); ++i) {
      Message_Char = Original_Message.charAt(i);
      if (Message_Char >= 'a' && Message_Char <= 'z') {
        Message_Char = (char) (Message_Char + Cipher_Key);

        if (Message_Char > 'z') {
          Message_Char = (char) (Message_Char - 'z' + 'a' - 1);
        }

        Encrypted_Message += Message_Char;
      } else if (Message_Char >= 'A' && Message_Char <= 'Z') {
        Message_Char = (char) (Message_Char + Cipher_Key);

        if (Message_Char > 'Z') {
          Message_Char = (char) (Message_Char - 'Z' + 'A' - 1);
        }

        Encrypted_Message += Message_Char;
      } else {
        Encrypted_Message += Message_Char;
      }
    }
    System.out.println("The Encrypted Message is : " + Encrypted_Message);
  }
}

上記のコードは、CaesarCipher 暗号化方式を実装しています。出力を参照してください。

Please enter a message:
This is delftstack.com
Enter the key:
3
The Encrypted Message is : Wklv lv ghoiwvwdfn.frp

Java でのシーザー暗号解読

復号化はその逆の操作になります。CaesarCipher メソッドを使用した復号化の実装を参照してください。

package delftstack;

import java.util.Scanner;

public class Caesar_Cipher_Decrypt {
  public static void main(String... s) {
    String Original_Message, Decrypted_Message = "";
    int Cipher_Key;
    char Message_Char;
    Scanner sc = new Scanner(System.in);
    System.out.println("Please enter an encrypted message: ");
    Original_Message = sc.nextLine();
    System.out.println("Enter the key: ");
    Cipher_Key = sc.nextInt();

    for (int i = 0; i < Original_Message.length(); ++i) {
      Message_Char = Original_Message.charAt(i);
      if (Message_Char >= 'a' && Message_Char <= 'z') {
        Message_Char = (char) (Message_Char - Cipher_Key);

        if (Message_Char < 'a') {
          Message_Char = (char) (Message_Char + 'z' - 'a' + 1);
        }

        Decrypted_Message += Message_Char;
      } else if (Message_Char >= 'A' && Message_Char <= 'Z') {
        Message_Char = (char) (Message_Char - Cipher_Key);

        if (Message_Char < 'A') {
          Message_Char = (char) (Message_Char + 'Z' - 'A' + 1);
        }

        Decrypted_Message += Message_Char;
      } else {
        Decrypted_Message += Message_Char;
      }
    }
    System.out.println("The Decrypted Message is : " + Decrypted_Message);
  }
}

上記のコードは、Java で CaesarCipher 復号化を実装しています。出力を参照してください。

Please enter an encrypted message:
Wklv lv ghoiwvwdfn.frp
Enter the key:
3
The Decrypted Message is : This is delftstack.com