C#을 사용한 카이사르 암호

샌프란시스코의 RSA와 런던의 InfoSecurity Europe에서 지난 몇 개월은 환상적인 기술 및 암호화 이벤트로 가득했습니다. RSA에서 우리는 One Time Pad로 더 잘 알려진 Vernam Cipher에 도전했습니다. 그것은 성공이었고 우리는 개발자들이 기술, 암호화 및 정보 보안에 대해 얼마나 호기심이 많은지 알게 되었습니다.

약속드린 대로 이 글은 카이사르 암호가 무엇이며 C# 프로그래밍 언어를 사용하여 약간 다른 방식으로 적용할 수 있는 방법을 설명하는 것입니다. 콘솔 응용 프로그램을 사용하기로 선택했기 때문에 걱정할 필요 없이 모든 기계에서 쉽게 프로그래밍할 수 있습니다.

카이사르 암호란?



Caesar 암호는 매우 간단한 암호화 기술이며 암호화 작동 방식을 이해하고자 하는 사람들을 위해 학문적 목적으로 널리 사용됩니다.

이러한 유형의 암호화는 일반 텍스트의 각 문자가 다른 알파벳 문자로 대체되어 왼쪽이나 오른쪽으로 특정 수의 위치를 ​​바꾸는 대체 암호입니다. 이 숫자는 키 값으로 정의됩니다.

이 기술을 가장 먼저 채택한 사람 중 한 명은 Julius Caesar였습니다. 그는 이 매체를 사용하여 장군과 의사 소통하여 군사 메시지를 보호했습니다. 로마의 역사가인 수에토니우스(Suetonius)에 따르면 카이사르의 암호화 시스템은 다음과 같았습니다.

"If he had anything confidential to say, he wrote it in cipher, that is, by so changing the order of the letters of the alphabet, that not a word could be made out. If anyone wishes to decipher these, and get at their meaning, he must substitute the fourth letter of the alphabet, namely D, for A, and so with the others."



요즘은 진부한 기술이지만 그 당시에는 그것을 읽을 수 있는 사람이 거의 없었고 이 소수는 코드 뒤에 있는 논리가 어떻게 작동하는지 전혀 몰랐기 때문에 혁명적이었습니다.

카이사르 암호는 단일 문자 치환 암호로 분류됩니다. 즉, 일반 텍스트의 각 문자가 일정한 방식(항상 같은 문자)으로 암호화된 알파벳의 다른 문자로 대체됩니다. 이러한 이유로 우리는 이를 해독할 수 있는 간단한 방법으로 간주하며 보안이 없기 때문에 실제로는 사용되지 않습니다. 또 다른 특징은 암호문이 일반 텍스트와 정확히 같은 수의 문자를 가지므로 모노그래픽 암호로 분류된다는 것입니다.

어떻게 작동합니까?


  • 알파벳 문자에 숫자 값을 할당합니다. 예: A = 1, B = 2, C = 3…
  • 시프트 암호를 정의할 문자를 선택하십시오
  • .
  • 그에 따라 문자를 계산하고 바꿉니다



  • C#을 사용한 코딩



    이 자습서에 대한 권장 사항:
  • 데스크톱/노트북 장치
  • 비주얼 스튜디오 2019
  • 기본 프로그래밍 지식

  • 프로젝트: 사용자가 암호화할 단어를 보내고 프로그램은 정의된 키를 기반으로 암호문을 반환합니다.

    콘솔을 사용할 때 더 대화식으로 만드는 아이디어는 사용자에게 암호화하려는 단어를 작성하고 userSensText라는 변수 문자열에 저장하도록 요청하는 것입니다.

    Console.WriteLine("Write the word to be encrypted: ");
    userSendsText = Console.ReadLine();
    


    이 단계에서는 이러한 변수를 상단에 선언해야 합니다.

    int encryption = 0, key = 10; // Number of key can be alter 
    string userSendsText = "", encryptedText = "";
    


    조건이 "입력한 단어의 길이가 i보다 작은 한"이 되는 반복 루프를 만들어 봅시다.

    for (int i = 0; i < userSendsText.Length; i++){
        int txtUser = (int)userSendsText[i];
        encryption = txtUser + key; //Read the text and displacement the numbers of positions based the key
        encryptedText += Char.ConvertFromUtf32(encryption); // Here, we are using UTF32 and special characters is added in the encryption which makes manual encryption a little more difficult
    }
    


    암호화를 마치려면 암호화된 단어를 보여주세요

    Console.WriteLine($"Encrypted Text: {encryptedText}");
    


    복호화하려면 이 변수를 다른 변수와 함께 선언해야 합니다.

    int decryption = 0;
    string decryptText = "";
    


    복호화하는 논리는 같지만 여기서는 암호화된 단어를 사용하여 키 번호를 빼내고 루프는 암호화된 길이를 사용합니다.

    for (int i = 0; i < encryptedText.Length; i++){
        int encrypted = (int)encryptedText[i];
        decryption = encrypted - key;
        decryptText += Char.ConvertFromUtf32(decryption);
    }
    


    지금 해독된 단어를 표시합니다.

    Console.WriteLine($"Decrypt Text: {decryptText}");
    


    다음은 "프라이버시가 우리의 본성입니다"라는 단어를 사용한 예입니다.

    Write the word to be encrypt:
    Privacy is our nature
    Encrypted Text: Z|skm*s}*y|*xk˜|o
    Decrypt Text: Vaultree is the future



    도전해 볼까요? 네 차례 야!



    더 흥미롭게 만들기 위해 임의의 키를 만들 수 있습니다.
    Github Repository에서 필요한 모든 코드에 액세스할 수 있습니다!

    Vaultree에서는 암호화된 미래를 구축하고 있습니다. 데이터를 안전하게 유지하는 데 도움이 되는 귀중한 정보와 추세를 공유하는 것을 좋아합니다. Sign up 전문가 팀과 함께 최신 사이버 보안 동향에 대해 논의할 수 있습니다.

    좋은 웹페이지 즐겨찾기