728x90
안녕하세요!
이번 글에서는 C#을 사용하여 시저 암호를 이용하여 문자열을 암호화 하는 프로그램을 만들어보겠습니다.
시저 암호
- 시저 암호는 평문의 각 문자를 알파벳 순서에서 일정한 거리만큼 이동시켜 암호문을 생성합니다.
- 이동하는 거리를 시프트(shift)라고 하며, 시프트 값이 양수인 경우 시저 암호화를 의미하고, 음수인 경우 시저 복호화를 의미합니다.
- 암호문에서 문자를 복호화하기 위해서는 시프트 값을 반대로 적용해야 합니다.
<예제 코드>
using System;
class Program
{
static void Main()
{
Console.WriteLine("시프트 암호화 프로그램");
Console.Write("평문을 입력하세요: ");
string plaintext = Console.ReadLine();
Console.Write("시프트 횟수를 입력하세요: ");
int shift = int.Parse(Console.ReadLine());
string ciphertext = Encrypt(plaintext, shift);
Console.WriteLine($"암호문: {ciphertext}");
}
static string Encrypt(string plaintext, int shift)
{
string encryptedText = "";
foreach (char c in plaintext)
{
if (char.IsLetter(c))
{
char encryptedChar = (char)(c + shift);
if ((char.IsLower(c) && encryptedChar > 'z') || (char.IsUpper(c) && encryptedChar > 'Z'))
{
encryptedChar = (char)(encryptedChar - 26);
}
encryptedText += encryptedChar;
}
else
{
encryptedText += c;
}
}
return encryptedText;
}
}
<코드 해석>
Console.WriteLine("시프트 암호화 프로그램");
- Main 함수는 프로그램의 진입점입니다.
- 코드 실행 시 첫 번째로 실행되는 부분입니다. "
- 시프트 암호화 프로그램"이라는 메시지를 출력합니다.
Console.Write("평문을 입력하세요: ");
string plaintext = Console.ReadLine();
Console.Write("시프트 횟수를 입력하세요: ");
int shift = int.Parse(Console.ReadLine());
- 사용자로부터 평문과 시프트 횟수를 입력받습니다.
- Console.ReadLine() 메소드를 사용하여 사용자 입력을 받습니다.
- 평문은 문자열로, 시프트 횟수는 정수로 저장됩니다.
string ciphertext = Encrypt(plaintext, shift);
Console.WriteLine($"암호문: {ciphertext}");
- Encrypt 함수를 호출하여 평문을 암호화합니다.
- 평문과 시프트 횟수를 인자로 전달합니다.
- 암호문을 ciphertext 변수에 저장합니다.
- 암호문을 "암호문: "과 함께 출력합니다.
- 문자열 보간을 사용하여 출력 문장을 구성합니다.
static string Encrypt(string plaintext, int shift)
{
string encryptedText = "";
foreach (char c in plaintext)
{
if (char.IsLetter(c))
{
char encryptedChar = (char)(c + shift);
if ((char.IsLower(c) && encryptedChar > 'z') || (char.IsUpper(c) && encryptedChar > 'Z'))
{
encryptedChar = (char)(encryptedChar - 26);
}
encryptedText += encryptedChar;
}
else
{
encryptedText += c;
}
}
return encryptedText;
}
- Encrypt 함수는 평문과 시프트 횟수를 인자로 받아 암호화된 문자열을 반환합니다.
- encryptedText 변수는 암호화된 문자열을 저장하기 위한 빈 문자열로 초기화됩니다.
- foreach 문을 사용하여 평문의 각 문자를 순회합니다.
- char.IsLetter(c) 메소드를 사용하여 문자가 알파벳인지 확인합니다.
- 알파벳인 경우, 해당 문자에 시프트 값을 더하여 암호화된 문자를 얻습니다.
- 시프트 후 암호문이 알파벳 범위를 벗어난다면, 알파벳 첫 문자부터 시작하도록 조정합니다.
- 알파벳이 아닌 경우, 해당 문자를 그대로 사용합니다.
- 암호화된 문자를 encryptedText에 추가합니다.
- 반복이 완료되면 암호문을 반환합니다.
이번 글에서는 간단한 암호화 프로그램을 다루었습니다.
위의 코드를 실행하면 "시프트 암호화 프로그램"이라는 메시지가 출력되고, 사용자로부터 평문과 시프트 횟수를 입력받아 암호문이 생성됩니다.
시프트 암호화 프로그램을 응용하여 자신만의 규칙을 만들어 암호화 해보는것도 재미있는 공부가 될거 같습니다.
감사합니다!
728x90
'[C#] > 콘솔 프로그래밍' 카테고리의 다른 글
[C#] 콘솔 프로그래밍 : 숫자야구 게임 (29) | 2023.07.26 |
---|---|
[C#] 콘솔 프로그래밍 : 종료 대기 (18) | 2023.07.12 |
[C#] 콘솔 프로그래밍 : 길찾기 게임 (26) | 2023.07.11 |
[C#] 콘솔 프로그래밍 : 요일 판단 (20) | 2023.07.10 |
[C#] 콘솔 프로그래밍 : 콘솔 가위바위보 게임 (25) | 2023.07.06 |