본문 바로가기

디지털포렌식(Digital forensic)/한글

셔플링(Shuffling) 암호, 산이전삼나두세도느과

반응형

낮은 수준의 암호 개념으로 입력된 문자의 순서를 무작위로 섞는 방법이다.

이렇게 하면 원래 문장의 구조가 부서지기 때문에 글을 읽기 어려워진다(가독성이 없다.).

그렇지만, 무작위로 섞인 문자는 원래의 문장이나 단어를 알고 있는 사람에게는 어렵지 않다.

 

예를 들어,

'낮말은새가듣고밤말은쥐가듣는다'를 셔플링해서 결과가

'듣가낮다쥐은말은밤는말새고듣가'로 나왔다면 당신은 이미 평문(원문)을 알고 있기때문에

어렵지 않게 맞출 수 있지만 외국인이나 속담을 모르는 사람은 맞추기 어렵다.

 

using System;
using System.Linq;
using System.Text;

class Program
{
    static string ShuffleCharacters(string input)
    {
        // Convert the input string to a character array
        char[] characters = input.ToCharArray();

        // Create a random number generator
        Random rng = new Random();

        // Shuffle the characters using Fisher-Yates shuffle algorithm
        for (int i = characters.Length - 1; i > 0; i--)
        {
            int j = rng.Next(0, i + 1);
            char temp = characters[i];
            characters[i] = characters[j];
            characters[j] = temp;
        }

        // Convert the shuffled character array back to a string
        return new string(characters);
    }

    static void Main(string[] args)
    {
        string originalText = "낮말은새가듣고밤말은쥐가듣는다";
        string shuffledText = ShuffleCharacters(originalText);

        Console.WriteLine($"Original Text: {originalText}");
        Console.WriteLine($"Shuffled Text: {shuffledText}");
    }
}

 

결과

Original Text: 낮말은새가듣고밤말은쥐가듣는다
Shuffled Text: 듣말다말는새밤고듣낮은가쥐은가

 

위 코드에서 string originalText를 애국가로 바꿔보면

string originalText = "동해물과 백두산이 마르고 닳도록\r\n하느님이 보우하사 우리나라 만세.\r\n무궁화 삼천리 화려강산\r\n대한사람, 대한으로 길이 보전하세.";

 

결과

Original Text:
동해물과백두산이마르고닳도록하느님이보우하사우리나라 만세무궁화 삼천리 화려강산대한사람대한으로 길이 보전하세.

Shuffled Text:
산이전삼나두세도느과백해우보길마으궁산이천대사만대리르물람우한동사보화무하하하님화고

 


결과는 애국가를 아는 사람도 쉽게 맞출 수 없다.

셔플링 암호는 문장이 길수록 조합하기가 어렵다.

 

 

 

728x90