C/C++でシーザー暗号を実装する方法


  1. 文字のシフト関数の作成: まず、指定された数だけアルファベットの文字をシフトさせる関数を作成します。以下は、C言語での例です。
#include <stdio.h>
char shift_char(char c, int shift) {
    if (c >= 'a' && c <= 'z') {
        c = 'a' + (c - 'a' + shift) % 26;
    } else if (c >= 'A' && c <= 'Z') {
        c = 'A' + (c - 'A' + shift) % 26;
    }
    return c;
}
  1. 文字列の暗号化関数の作成: 次に、与えられた文字列を指定された数だけシフトさせて暗号化する関数を作成します。以下は、C言語での例です。
void encrypt_string(char* str, int shift) {
    int i = 0;
    while (str[i] != '\0') {
        str[i] = shift_char(str[i], shift);
        i++;
    }
}
  1. 文字列の復号化関数の作成: 暗号化された文字列を指定された数だけ逆方向にシフトさせて復号化する関数を作成します。以下は、C++での例です。
#include <string>
void decrypt_string(std::string& str, int shift) {
    for (char& c : str) {
        c = shift_char(c, -shift);
    }
}
  1. サンプルコードの実行: 上記で作成した関数を使用して、文字列の暗号化と復号化を行うサンプルコードを以下に示します。
#include <iostream>
#include <string>
int main() {
    std::string message = "Hello, World!";
    int shift = 3;
    std::cout << "Original message: " << message << std::endl;
    encrypt_string(&message[0], shift);
    std::cout << "Encrypted message: " << message << std::endl;
    decrypt_string(message, shift);
    std::cout << "Decrypted message: " << message << std::endl;
    return 0;
}

上記のコードは、与えられた文字列を3文字ずらして暗号化し、復号化する例です。実行すると、以下のような出力が得られます。

Original message: Hello, World!
Encrypted message: Khoor, Zruog!
Decrypted message: Hello, World!

以上が、C言語とC++でシーザー暗号を実装する方法のシンプルな例です。シーザー暗号の応用やセキュリティについては、さらなる学習と研究が必要です。