분류 javascript

JavaScript로 암호 시스템 구축 (3)

컨텐츠 정보

  • 조회 94 (작성일 )

본문

function encrypt(char) {

  const shift = Number(form.shift.value);

  if (alphabet.includes(char.toUpperCase()))

  {

    const position = alphabet.indexOf(char.toUpperCase());

    const newPosition = (position + shift)%26;

    return alphabet[newPosition]

  }

  else { return char }

}


이 함수는 문자를 인수로 받아 들인 다음 암호화 된 문자를 반환합니다.


기능은 내 책의 4 장에서 다룹니다.


폼에서 변수 시프트로 시프트 입력 필드의 값을 할당하여 시작합니다. 코드 form.shift.value를 사용하여 액세스 할 수 있습니다. 양식에 입력 된 모든 값은 문자열로 제출되므로 Number() 함수를 사용하여 이 변수의 유형을 숫자로 변경해야 합니다. 그러면 산술 및 기타 숫자 방법을 사용할 수 있습니다.


다음으로 인수가 알파벳의 일부인지 확인하는 조건문이 있습니다. include() 배열 메소드를 사용하여 인수가 배열에 있으면 true를 리턴합니다. 알파벳 배열의 모든 문자가 대문자이므로 toUpperCase() 메서드를 사용하여 문자가 대문자인지 확인합니다.


문자가 알파벳 배열에 있으면 암호화를 진행할 수 있습니다. 그렇지 않은 경우 문자를 그대로 반환합니다 (공백과 문장 부호를 처리 할 수 있게 합니다).


암호화 코드는 알파벳 배열에서 요소를 반환합니다.


const position = alphabet.indexOf(char.toUpperCase());

    const newPosition = (position + shift)%26;

    return alphabet[newPosition]


먼저, indexOf() 배열 메소드를 사용하여 알파벳 배열에서 문자의 색인을 찾으십시오. 이것은 가변 위치에 저장됩니다. 다음으로 shift 값을 인덱스에 추가하여 암호화 된 문자의 위치를 ​​찾습니다. 또한 산술 'mod 26'을 사용하기 위해 모듈 식 연산자 %를 사용합니다. 즉, 25를 초과하는 값은 배열의 시작 부분으로 '루프'하고 26은 0, 27-1, 28-2 등으로 이동합니다. 이는 3의 시프트를 갖는 문자 'X'를 의미합니다. 알파벳의 시작 부분으로 돌아가 'A'에 매핑합니다. 이 값은 newPosition 변수에 저장됩니다.


그런 다음 newPosition 변수를 알파벳 배열의 인덱스로 제공하여 이 새로운 위치에 해당하는 알파벳 배열의 문자를 반환합니다.


그리고 이것이 우리가 필요로 하는 모든 코드입니다! 텍스트 영역에 메시지를 입력하고 '제출'을 누르면 비밀 메시지가 아래에 표시됩니다.


별도의 encrypt() 함수를 사용하는 장점은 코드의 다른 부분을 변경하지 않고도 언제든지 다른 암호화 방법을 사용하도록 업데이트 할 수 있다는 것입니다.


Caesar 암호는 Enigma 코드의 기본 이었지만 가장 기본적인 암호 중 하나 일 것입니다.