사용자 지정 알파벳 인코더 및 디코더

알파벳을 직접 입력하거나 프리셋에서 시작해 인코딩 또는 디코딩합니다. 알파벳 길이에 제한이 없는 큰 수 변환 방식과 RFC 4648 스타일로 출력하는 비트 그룹 방식 중에서 선택할 수 있습니다.

브라우저에서만 실행되며 어떤 데이터도 업로드되지 않습니다.

사용 방법

  1. ‘알파벳’에 원하는 문자를 입력하거나, ‘프리셋’을 고른 뒤 수정합니다. 각 문자는 한 번만 사용할 수 있습니다.
  2. ‘방식’을 선택합니다. 알파벳 길이에 상관없이 쓰려면 ‘큰 수 변환(Base58 방식)’을, 문자 2, 4, 8, 16, 32, 64개로 된 알파벳이라면 ‘비트 그룹(RFC 4648 방식)’을 선택할 수 있습니다.
  3. 비트 그룹 방식에서는 필요하면 알파벳에 포함되지 않은 문자를 ‘패딩 문자’로 입력합니다.
  4. 텍스트를 인코딩하거나, 해당 알파벳으로 작성된 문자열을 붙여넣어 디코딩합니다.

바이트를 문자로 대응시키는 두 가지 방법

큰 수 변환은 Base58과 같은 방식으로 동작합니다. 입력 전체를 하나의 큰 정수로 읽고 알파벳 길이로 계속 나누며, 나머지 하나하나가 문자 하나를 결정합니다. 10, 36, 58, 62처럼 문자가 2개 이상인 알파벳이라면 무엇이든 사용할 수 있습니다. 앞쪽의 0 바이트는 알파벳의 첫 문자로 표기하므로 인코딩했다가 다시 디코딩해도 그대로 남습니다. 패딩은 없으며, 데이터가 길면 계산이 느려지기 때문에 입력은 약 20KB로 제한됩니다.

비트 그룹은 RFC 4648과 같은 방식으로 동작합니다. 입력을 고정된 비트 수의 조각으로 자르는데, 2자 알파벳은 1비트, 16자는 4비트, 32자는 5비트, 64자는 6비트입니다. 각 조각은 알파벳의 인덱스가 됩니다. 16진수, Base32, Base64가 바로 이렇게 동작하며, 출력 길이는 입력 길이에만 좌우됩니다.

두 방식의 결과가 다른 이유

한 방식은 데이터의 수치 값을, 다른 방식은 데이터의 비트를 위치별로 인코딩합니다. 따라서 결과는 대개 다르며, 문자열은 그것을 만든 방식으로 디코딩해야 합니다.

알파벳입력비트 그룹큰 수 변환
표준 Base64HiSGk=Ehp
RFC 4648 Base32HiJBUQ====SDJ
01A010000011000001
0123456789Hi사용할 수 없음18537

비트 그룹 방식에서 =를 패딩으로 지정하면 표준 알파벳으로 일반 Base64와 Base32를 그대로 재현할 수 있습니다. 큰 수 변환은 고정된 비트 수가 아니라 값을 표기하므로 A의 맨 앞 0 비트를 생략합니다. 10개의 숫자를 알파벳으로 쓰면 Hi의 바이트를 10진수로 보여 줄 뿐입니다.

패딩 문자는 비트 그룹에만 적용됩니다. 64자 알파벳은 출력을 4문자의 배수로, 32자와 8자 알파벳은 8문자의 배수로 채웁니다. 2자, 4자, 16자 알파벳에서는 모든 바이트가 문자를 정확히 채우므로 패딩이 필요하지 않습니다.

올바른 알파벳의 조건

  • 문자가 2개 이상이어야 합니다.
  • 중복이 없어야 합니다. 디코더는 각 문자를 정확히 하나의 값으로 되돌립니다. a가 0과 10을 모두 나타낸다면 이 문자가 들어 있는 문자열은 디코딩할 수 없습니다.
  • 대소문자를 구분합니다. a와 A는 서로 다른 문자입니다.
  • 패딩 문자는 알파벳에 포함되면 안 됩니다. 포함되면 데이터와 구별할 수 없습니다.

모든 처리가 브라우저에서 이루어지므로 알파벳과 데이터는 기기 밖으로 나가지 않습니다.

사용자 지정 알파벳이 유용한 경우

  • 난독화된 ID. 문자 순서를 섞은 알파벳을 사용하면 식별자가 뚜렷한 패턴이 없는 토큰으로 바뀝니다. 이는 감추는 것일 뿐 보호하는 것이 아닙니다. 알파벳을 아는 사람은 누구나 디코딩할 수 있습니다.
  • 독자 형식 또는 레거시 형식. 시스템 문서에서 그 시스템 고유의 알파벳을 복사해 데이터를 바로 디코딩합니다.
  • 학습. 알파벳 길이와 두 방식을 비교하며 진법 변환이 어떻게 동작하는지 확인해 보십시오. 고정된 알파벳은 Base58과 Base62를 참고하십시오.

자주 묻는 질문

큰 수 변환과 비트 그룹의 차이는 무엇입니까?

큰 수 변환은 Base58처럼 입력 전체를 하나의 정수로 보고 새 진법으로 변환하며, 알파벳 길이에 제한이 없습니다. 비트 그룹은 Base64처럼 입력을 고정 크기의 비트 조각으로 나누며, 문자 2, 4, 8, 16, 32, 64개로 된 알파벳이 필요합니다.

직접 만든 Base64 알파벳의 결과가 표준 Base64와 다른 이유는 무엇입니까?

표준 Base64는 비트 그룹 방식을 사용합니다. 같은 결과를 얻으려면 비트 그룹 방식을 선택하고 패딩 문자를 =로 설정하십시오. 큰 수 변환 방식은 같은 알파벳으로도 완전히 다른 문자열을 만듭니다.

중복 문자를 허용하지 않는 이유는 무엇입니까?

각 문자는 정확히 하나의 값으로 디코딩되어야 합니다. 문자가 반복되면 한 문자가 두 가지 의미를 갖게 되어 원래 데이터를 확실하게 복원할 수 없습니다.

큰 수 변환 방식에서도 패딩 문자를 쓸 수 있습니까?

아니요. 큰 수 변환의 출력에는 고정된 블록 크기가 없으므로 채울 것이 없습니다. 패딩 옵션은 비트 그룹에만 적용됩니다.

사용자 지정 알파벳은 일종의 암호화입니까?

아니요. 여전히 키가 없는 인코딩일 뿐입니다. 순서를 섞은 알파벳은 데이터를 한눈에 알아보기 어렵게 만들 수는 있지만, 비밀을 보호하는 데 사용해서는 안 됩니다.