반응형
아핀 암호는 시저 암호와 비제네르 암호보다 더 복잡한 암호화 방법으로,
두 개의 정수 값과 모듈러 연산을 사용하여 암호화한다.
아핀 암호의 수학식은 아래와 같다.
C = (a * P + b) % 26
- C: 암호문의 문자
- a: 정수 값(공개적으로 알려진 값)
- P: 평문 문자
- b: 정수 값(또 다른 키 값)
- 26: 알파벳 길이 (알파벳 개수 = 문자집합의 크기)
여기서 a와 b는 암호화를 조절하는 두 개의 키 값이다.
a는 모듈러 역원을 가지는 값이고, 이는 수학적으로 '서로소 관계'인 경우에 해당된다.
아핀 암호는 암호학에서 사용되는 대표적인 대치 암호 중 하나입니다. 이 암호는 두 개의 정수, 일반적으로 a와 b라고 표시되는 두 개의 매개변수를 사용하여 평문 문자를 암호화하는 데 사용됩니다.
아핀 암호의 복호화는 아래와 같은 구조를 갖는다.
P = (a^(-1) * (C - b)) % M
P는 평문 문자이고,
a^(-1)은 a의 모듈러 역수를 나타낸다. 즉, a * a^(-1) % M = 1이어야 한다.
using System;
class AffineCipher
{
static int ModInverse(int a, int m)
{
for (int x = 1; x < m; x++)
if ((a * x) % m == 1)
return x;
return 1;
}
static string Encrypt(string plaintext, int a, int b)
{
string ciphertext = "";
foreach (char c in plaintext)
{
if (char.IsLetter(c))
{
char encryptedChar = (char)(((a * (c - 'A') + b) % 26) + 'A');
ciphertext += encryptedChar;
}
else
{
ciphertext += c;
}
}
return ciphertext;
}
static string Decrypt(string ciphertext, int a, int b)
{
int aInverse = ModInverse(a, 26);
string plaintext = "";
foreach (char c in ciphertext)
{
if (char.IsLetter(c))
{
char decryptedChar = (char)(((aInverse * (c - 'A' - b + 26)) % 26) + 'A');
plaintext += decryptedChar;
}
else
{
plaintext += c;
}
}
return plaintext;
}
static void Main(string[] args)
{
string plaintext = "WINE";
int a = 5;
int b = 8;
string encryptedText = Encrypt(plaintext, a, b);
Console.WriteLine("Encrypted: " + encryptedText);
string decryptedText = Decrypt(encryptedText, a, b);
Console.WriteLine("Decrypted: " + decryptedText);
}
}
WINE 이라는 평문을 입력하면 OWVC로 암호화가 된다.
암호화된 알파벳 QAPASAA의 원문은?
728x90
'디지털포렌식(Digital forensic) > 키(key)' 카테고리의 다른 글
[파일] pycryptodome를 이용한 암호화, 복호화 (0) | 2023.12.01 |
---|---|
[파일] ZIP 파일 만들기 코드 (0) | 2023.11.30 |
윈도우즈 11의 기본값, SSD 암호화 ON (0) | 2023.10.24 |
[파일]QR 코드 생성 프로그램 (1) | 2023.10.17 |
린겐 서명 암호, Lattice Signature (0) | 2023.08.28 |