비트 코 인의 Base 58 인 코딩
비트 코 인 주소:
123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz
Monero 주소
123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz
Ripple 주소
rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz
Flickr 의 짧 은 URL
123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ
Base 58 인 코딩 및 디 코딩
Base 58 의 입력 은 [0, 256) 값 의 흐름 입 니 다. 출력 결 과 는 [0, 58) 값 의 흐름 입 니 다. 그리고 모든 값 을 알파벳 을 찾 아 가시 적 인 문자열 을 얻 습 니 다. 변환 과정 은 실제 256 진법 의 값 을 58 진법 으로 변환 합 니 다.
진 변환 과정 은 다음 과 같 습 니 다 (아래 위조 코드 는 256 진 을 58 진 으로 변환 하 는 과정 을 설명 합 니 다. base 58 인 코딩 은 58 진 흐름 검사 표를 대응 하 는 문자 흐름 으로 변환 해 야 합 니 다).
# input 256 output 58
for carry in input:
for (outputPos, outputNum) in output.reverse():
carry += outputNum * 256
output[outputPos] = carry % 58
carry /= 58
# output , carry , output
while carry != 0 :
output.insertFront(carry%58)
carry /= 58
실현 할 때 시작 하 는 0 은 특수 처리 가 필요 하 다. 0 전환 후에 도 0 이기 때문에 입력 흐름 시작 하 는 0 을 결과 앞 에 직접 채 울 수 있다.
역 변환 과정 (입력 문자열 을 58 진 흐름 으로 변환 한 다음 58 진 흐름 을 256 진 흐름 으로 변환 합 니 다. 아래 의사 코드 는 58 진 을 256 진 으로 변환 합 니 다):
# input 58 output 256
for carry in input:
for (outputPos, outputNum) in output.reverse():
carry += outputNum * 58
output[outputPos] = carry % 256
carry /= 256
# output , carry , output
while carry != 0 :
output.insertFront(carry%256)
carry /= 256
마찬가지 로 실현 할 때 시작 하 는 0 은 특수 처리 가 필요 하 다. 0 전환 후에 도 0 이기 때문에 입력 흐름 시작 하 는 0 을 결과 앞 에 직접 채 울 수 있다.
Base58Check
비트 코 인 이 개선 판 Base 58 알고리즘 을 추가 한 이 유 는 Base 58 에서 내 보 낸 문자열 이 검증 메커니즘 이 없 는 것 을 해결 하기 위해 서 입 니 다. 그러면 전파 과정 에서 몇 글자 가 빠 지면 감지 되 지 않 습 니 다. 그래서 개선 판 알고리즘 Base 58 Check 을 사 용 했 습 니 다.
구현: encode 전에 입력 스 트림 끝 에 입력 내용 의 hash 값 (4 바이트) 을 추가 한 다음 입력 스 트림 을 Base58Encode 합 니 다.
decode 에서: 먼저 Base58Decode 를 한 다음 에 두 부분 (내용 과 검사 값) 으로 뜯 어서 내용 계산 에 대한 검사 값 과 검사 값 필드 가 일치 하 는 지 판단 합 니 다.
Go 의 base 58 라 이브 러 리:https://github.com/shengdoushi/base58
비트 코 인 Base 58 관련 소스 주소:https://github.com/bitcoin/bitcoin/blob/master/src/base58.cpp
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.