tools / base58
base58/
텍스트나 hex와 Base58을 서로 변환합니다. 비트코인 알파벳을 사용하며, 맨 앞의 00 바이트는 맨 앞의 1이 됩니다.
입력
Base58
자주 묻는 질문
Base58에 0, O, I, l이 없는 이유는 무엇이고, "Base58 알파벳에 없습니다"라고 나오면 어떻게 하나요?
Base58은 숫자 0, 대문자 O, 대문자 I, 소문자 l을 일부러 뺐습니다. 손으로 쓰거나 눈으로 볼 때 헷갈리기 쉬운 문자이기 때문이며, 남은 58개 문자는 1~9, 대문자 A~Z(I와 O 제외), 소문자 a~z(l 제외)입니다. 디코딩할 때 알파벳 밖의 문자가 나오면 몇 번째 문자이고 어떤 문자인지 알려 줍니다. 먼저 복사하다가 따옴표, 문장 부호, 보이지 않는 문자가 섞이지 않았는지 확인하세요. 공백과 줄바꿈은 자동으로 무시합니다. 문자열에 원래 0, O, I, l이 들어 있다면 Base58이 아니라 Base64, hex 또는 다른 인코딩일 가능성이 큽니다.
Base58 디코딩 후 "올바른 UTF-8 텍스트가 아닙니다"라고 나오면 어떻게 하나요?
디코딩된 바이트가 UTF-8 텍스트가 아니라는 뜻입니다. 개인 키, 공개 키 해시, 주소 같은 데이터는 원래 바이너리입니다. "출력 형식"을 hex로 바꾸면 원본 바이트를 볼 수 있습니다. 텍스트 인코딩은 항상 UTF-8로 처리하므로 GBK 등 다른 인코딩으로 쓴 바이트는 여기서 텍스트로 읽을 수 없고, 해당 인코딩을 지원하는 도구로 변환해야 합니다.
Base58 결과 맨 앞의 1은 무슨 뜻이고, hex 맨 앞의 00은 왜 1이 되나요?
Base58은 바이트열 전체를 하나의 큰 정수로 보고 진법을 바꿉니다. 맨 앞의 00 바이트는 값으로는 없는 것과 같아 사라지므로, 맨 앞의 00 바이트 하나를 맨 앞의 1 하나(알파벳의 0번째 문자)로 쓰기로 약속했습니다. 예를 들어 hex 0000010203의 결과는 11Ldp이고, 맨 앞의 1 두 개가 00 두 개에 해당합니다. 디코딩할 때는 맨 앞에 1이 몇 개 있든 그만큼 00 바이트로 되돌립니다. 입력이 전부 00이면 1만 이어진 결과가 됩니다.
비트코인 주소를 디코딩할 수 있나요? Base58Check 체크섬은 어떻게 되나요?
바이트로는 디코딩되지만 검증은 하지 않습니다. 비트코인 주소는 Base58Check를 쓰는데, 버전 바이트, 데이터, 4바이트 체크섬을 이어 붙인 뒤 Base58로 인코딩한 것입니다. 이 도구는 일반 Base58만 처리하므로 디코딩하면 체크섬을 검사하거나 떼어 내지 않은 전체 원본 바이트가 나오고, 인코딩할 때도 체크섬을 붙여 주지 않습니다. 예를 들어 1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa를 디코딩하면(출력은 hex) 25바이트이며, 버전 1바이트 00, 해시 20바이트, 마지막 4바이트가 체크섬입니다.
Base58과 Base64는 무엇이 다른가요?
Base64는 64개 문자(+와 /를 포함하고, 끝에 =가 붙을 수 있음)를 쓰며 3바이트씩 변환하므로 빠르고 길이를 예측할 수 있습니다. Base58은 헷갈리기 쉬운 문자와 +, /, =를 없앴기 때문에 더블클릭하면 문자열 전체가 선택되고 손으로 옮겨 적어도 실수가 적습니다. 대신 데이터 전체를 큰 정수로 보고 나눗셈을 해야 해서 길어질수록 느려지므로, 주소나 키처럼 수십 바이트 정도의 짧은 데이터에 주로 씁니다. 두 결과는 서로 바꿔 쓸 수 없습니다.
인코딩 결과가 다른 사이트나 라이브러리와 다른 이유는 무엇인가요?
세 가지를 확인하세요. 알파벳: 이 도구는 비트코인 알파벳을 쓰는데, Flickr 알파벳은 소문자가 앞에 오고 Ripple은 순서가 또 달라서 결과가 다를 수밖에 없습니다. 입력 내용: 텍스트는 입력한 그대로 UTF-8로 인코딩하므로 끝에 줄바꿈이나 공백이 하나만 더 있어도 결과가 달라집니다. 입력 형식: hex 바이트를 인코딩하려면 hex를 골라야 하며, 그러지 않으면 0a1b가 네 글자짜리 텍스트로 처리됩니다. hex 입력은 공백, 콜론, 쉼표 구분자나 0x 접두어를 쓸 수 있고 자릿수는 짝수여야 합니다.
Base58 입력에 길이 제한이 있나요?
있습니다. 인코딩은 최대 32768바이트, 디코딩은 최대 45000자이며, 넘으면 나누어 처리하라는 안내가 나옵니다. Base58은 계산량이 길이의 제곱에 비례해 늘어나므로, 페이지가 멈추지 않도록 상한을 두었습니다. 몇 KB 이하라면 거의 즉시 결과가 나옵니다.
입력한 내용이 업로드되나요?
아니요. 인코딩과 디코딩은 모두 브라우저 안에서 이루어지며 서버로 전송되지 않습니다.