반응형
영어단어 시저(Caesar)는 독일에서는 카이저(kaiser), 러시아에서는 '차르(czar)'라고 하며 뜻은 '황제'다.
시저 암호는 로마 시대의 황제 시저가 사용한 것으로 알려져서 이 같은 이름이 붙여졌다.
시저 암호는 가장 간단한 치환 암호 방법이다.
시저 암호의 작동 방식은 주어진 암호화할 텍스트(평문)에서 각 문자를 알파벳에서
일정한 거리만큼 앞이나 뒤로 이동시켜 암호화한다. 이 거리를 "시프트 값"이라고 한다.
예를 들어, 시프트 값이 3이라면 'A'는 'D'로, 'B'는 'E'로 바뀐다.
암호화에 사용한 시프트 값을 알고 있으면 쉽게 암호화된 메시지를 해독할 수 있다.
using System;
class Program
{
static string CaesarCipher(string text, int shift)
{
string encryptedText = "";
foreach (char c in text)
{
if (char.IsLetter(c))
{
if (char.IsLower(c))
{
encryptedText += (char)(((c - 'a' + shift) % 26) + 'a');
}
else if (char.IsUpper(c))
{
encryptedText += (char)(((c - 'A' + shift) % 26) + 'A');
}
}
else
{
encryptedText += c;
}
}
return encryptedText;
}
static void Main(string[] args)
{
string plaintext = "Samsung";
int shiftAmount = 3;
string encryptedText = CaesarCipher(plaintext, shiftAmount);
Console.WriteLine("암호화된 메시지: " + encryptedText);
}
}
결과
암호화된 메시지: Vdpvxqj
★ 평문에 한글을 입력하면 작동하지 않는다.
encryptedText += (char)(((c - 'A' + shift) % 26) + 'A'); 코드는
실제로 암호화를 수행하는 부분으로 코드에서 c는 암호화할 원본 문자를 나타내는 변수다.
'A'는 알파벳의 시작을 나타내는 문자 'A'를 나타내며, shift는 시프트 값이다.
- c - 'A': 원본 문자 c에서 'A'를 빼서 알파벳에서의 상대적 위치를 얻는다.
예를 들어, 'C'라면 결과는 2가 된다.
(c - 'A' + shift): 상대적 위치에 시프트 값을 더한다.
이렇게 하면 시프트된 상대적 위치를 얻게 된다.
((c - 'A' + shift) % 26): 알파벳은 총 26개의 문자로 구성되어 있기 때문에, 이 연산은 0부터 25 사이의 값을 가지도록 시프트 값을 알파벳 개수로 나눈 나머지를 계산하게 된다.
이렇게 하면 암호화된 문자의 상대적 위치가 알파벳 범위 내에 유지된다.
((c - 'A' + shift) % 26) + 'A':
위에서 계산한 나머지 값에 다시 'A'를 더해 실제 암호화된 문자의 아스키 코드 값을 얻는다. - 이렇게 계산된 아스키 코드 값을 char 형식으로 변환하여 암호화된 문자를 생성한다.
ZRRNL
위 암호는 무엇일까?
728x90
'디지털포렌식(Digital forensic) > 알파벳' 카테고리의 다른 글
[파일] 생존 신호 모스 부호, 이진화 (0) | 2023.10.06 |
---|---|
[파일]ROT13, 10대의 암호 (1) | 2023.09.08 |
폴리비오스(Πολύβιος) 암호, 12513414113422 (0) | 2023.08.30 |
bit shift 암호, 75, 79, 82, 69, 65 (1) | 2023.08.25 |
XOR 암호, aeae?yAAI (1) | 2023.08.24 |