튜토리얼 원타임 패드(Vernam Cipher) 알고리즘

안녕하세요, 볼트라리안 여러분!

오늘 우리는 Vernam Cipher라고도 알려진 One Time Pad 알고리즘에 대해 자세히 알아볼 것입니다. 하지만, 뭔데?

OTP는 알파벳 평문을 암호화하는 방식이다. 일반 텍스트를 암호문(복호화된 단어)으로 변환하는 대체 기술 중 하나입니다. 이 아이디어에서는 일반 텍스트의 각 문자에 번호를 할당합니다.

과제는 다음과 같습니다.



이 알고리즘에서 키워드의 길이는 일반 텍스트의 길이와 같아야 합니다.

예:

입력: 메시지 = VAULTREE, 키워드 = AXDHCGQK
출력: 암호 – VXXSVXUO, 메시지 – VAULTREE
설명:
파트 1: 평문을 암호문으로
일반 텍스트 — V AUL T R E E → 21 0 20 11 19 17 4 4
키 — A X D H C G Q K → 0 23 3 7 2 6 16 10
일반 텍스트 + 키워드 = 21 23 23 18 21 23 20 14
암호문 → V X X S V X U O
파트 2: 암호문을 메시지로
암호문 — V X X S V X U O → 21 23 23 18 21 23 20 14
키 — A X D H C G Q K → 0 23 3 7 2 6 16 10
암호문 - 키 = 21 0 20 11 19 17 4 4 → 메시지 → V AUL T R E E

기본적으로 암호화 단계는 다음과 같습니다.

1- 일반 텍스트의 각 문자와 알파벳 순서에 따라 키워드에 번호를 할당합니다.
2- 숫자(해당 일반 텍스트 문자 번호와 키워드 문자 번호)를 모두 추가( + )합니다.
3- 더한 수가 26보다 크면 26에서 빼기(-)하고 없으면 그대로 둡니다.

암호 해독 방법은 암호화의 역 과정인 CT - KW = PT를 적용하는 것임을 기억하십시오. (암호문 - 키워드 = 일반 텍스트).

다음은 OTP 알고리즘의 구현입니다.

`

public class OtpByVaultree {
// Method 1
// Returning encrypted text
public static String stringEncryption(String text,
                                      String key)
{

    // Initializing cipherText
    String cipherText = "";

    // Initialize cipher array of key length
    // which stores the sum of corresponding no.'s
    // of plainText and key.
    int cipher[] = new int[key.length()];

    for (int i = 0; i < key.length(); i++) {
        cipher[i] = text.charAt(i) - 'A'
                + key.charAt(i)
                - 'A';
    }

    // If the sum is greater than 25
    // subtract 26 from it
    // and store that resulting value
    for (int i = 0; i < key.length(); i++) {
        if (cipher[i] > 25) {
            cipher[i] = cipher[i] - 26;
        }
    }

    // Converting the no.'s into integers

    // Convert these integers to corresponding
    // characters and add them up to cipherText
    for (int i = 0; i < key.length(); i++) {
        int x = cipher[i] + 'A';
        cipherText += (char)x;
    }

    // Returning the cipherText
    return cipherText;
}

// Method 2
// Returning plain text
public static String stringDecryption(String s,
                                      String key)
{
    // Initializing plain text
    String plainText = "";

    // Initializing integer array of key length
    // which stores difference
    // of corresponding no.'s of
    // each character of cipherText and key
    int plain[] = new int[key.length()];

    // Running for loop for each character
    // subtracting and storing in the array
    for (int i = 0; i < key.length(); i++) {
        plain[i]
                = s.charAt(i) - 'A'
                - (key.charAt(i) - 'A');
    }

    // If the difference is less than 0
    // add 26 and store it in the array.
    for (int i = 0; i < key.length(); i++) {
        if (plain[i] < 0) {
            plain[i] = plain[i] + 26;
        }
    }

    // Converting int to corresponding char
    // add them up to plainText
    for (int i = 0; i < key.length(); i++) {
        int x = plain[i] + 'A';
        plainText += (char)x;
    }

    // Returning plainText
    return plainText;
}

// Method 3
// Main driver method
public static void main(String[] args)
{
    // Declaring plain text
    String plainText = "VAULTREE";

    // Declaring key
    String key = "AXDHCGQK";

    // Converting plain text to toUpperCase
    // function call to stringEncryption
    // with plainText and key as parameters
    String encryptedText = stringEncryption(
            plainText.toUpperCase(), key.toUpperCase());

    // Printing cipher Text
    System.out.println("Cipher Text - "
            + encryptedText);

    // Calling above method to stringDecryption
    // with encryptedText and key as parameters
    System.out.println(
            "Message - "
                    + stringDecryption(encryptedText,
                    key.toUpperCase()));
}}

`

이 알고리즘을 사용하면 OTP 방법을 사용하여 메시지를 해독할 수 있습니다. 재미있게 보내세요!

-

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

좋은 웹페이지 즐겨찾기