반응형
C# 코드로 구현한 비트 연산을 이용한 간단한 암호화 예제다.
예제에서는 XOR 연산을 사용하여 데이터를 암호화하고 복호화하는 방식을 사용한다.
XOR 연산은 배타적 논리합 연산을 말한다.
두 개의 입력이 주어졌을 때, 두 개의 입력 중 하나만이 참(True)일 때 결과가 참이 되며,
둘 다 참이거나 둘 다 거짓일 때는 결과가 거짓(False)이 된다.
XOR은 "Exclusive OR"의 약어로서, 배타적인 조건을 나타낸다.
XOR 연산의 진리표
입력 A | 입력 B | 결과 |
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
사용된 주요 값들은 평문은 panintext = "NANA Wine" 이고,
키값은 int key = 0xAA,
핵심 코드는 XOR를 수행하는
encryptedChars[i] = (char)(inputChars[i] ^ key) 코드는
- inputChars[i]: inputChars 배열의 i번째 요소로부터 문자 값을 가져온다.
- key: XOR 연산을 수행할 때 사용할 키 값을 가져온다.
- (char): XOR 연산 결과를 문자로 형을 변환한다.
- ^: XOR 연산자를 사용하여 inputChars[i]와 key를 비트 단위로 XOR 연산한다.
- encryptedChars[i]: XOR 연산 결과를 encryptedChars 배열의 i번째 위치에 저장다.
using System;
class BitwiseEncryptionExample
{
static void Main(string[] args)
{
string plaintext = "NANA Wine";
int key = 0xAA; // 이 예제에서 사용할 키 값
// 암호화
string encrypted = Encrypt(plaintext, key);
Console.WriteLine("Encrypted: " + encrypted);
// 복호화
string decrypted = Decrypt(encrypted, key);
Console.WriteLine("Decrypted: " + decrypted);
}
static string Encrypt(string input, int key)
{
char[] inputChars = input.ToCharArray();
char[] encryptedChars = new char[inputChars.Length];
for (int i = 0; i < inputChars.Length; i++)
{
encryptedChars[i] = (char)(inputChars[i] ^ key);
}
return new string(encryptedChars);
}
static string Decrypt(string input, int key)
{
return Encrypt(input, key); // XOR 연산은 암호화와 복호화가 동일
}
}
결과
æii?ayai?yaaa
누구의 이름일까?
728x90
'디지털포렌식(Digital forensic) > 알파벳' 카테고리의 다른 글
[파일] 생존 신호 모스 부호, 이진화 (0) | 2023.10.06 |
---|---|
[파일]ROT13, 10대의 암호 (1) | 2023.09.08 |
폴리비오스(Πολύβιος) 암호, 12513414113422 (0) | 2023.08.30 |
시저 암호, Vdpvxqj라고 쓰고 Samsung이라고 읽음. (1) | 2023.08.29 |
bit shift 암호, 75, 79, 82, 69, 65 (1) | 2023.08.25 |