HanBase256

Compact for copy/paste. Typable in a pinch.

Hexadecimal mixes letters and numbers, making it hard to type. In Korean, 2 and e both sound like “이(yi)”.

Base64/85 are compact, but awkward to type.
BIP39 uses readable words, but gets long.

SHA-256: 64 Hexadecimal digits → 32 Hangul syllables. Checksum optional.

Online converter

Text → SHA-256 → compare representations.

Spaces and line breaks count. Text uses UTF-8.

Same hash. Different representations.

Hexadecimal
d7a8fbb307d7809469ca9abcb0082e4f8d5651e46d3cdb762d02d0bf37c9e592
64 characters · 64 bytes · — words
Base64
16j7swfXgJRpypq8sAguT41WUeRtPNt2LQLQvzfJ5ZI=
44 characters · 44 bytes · — words
Base85
*Qoom2iJg<Y08?sum~<sjaE_QZ9Lm{EdtQLH_7Fa
40 characters · 40 bytes · — words
HanBase256 spaced
키인환정 검키시열 산추외진 전결더물 어방민팔 색레태소 대감침참 등최퍼역
39 characters · 103 bytes · — words
HanBase256 spaced+checksum
키인환정 검키시열 산추외진 전결더물 어방민팔 색레태소 대감침참 등최퍼역 +색
42 characters · 108 bytes · — words
BIP39 English
stumble elephant under autumn job enforce poet fashion royal leopard argue pair step cigar museum pole swarm ramp doll pause vibrant top north ethics
149 characters · 149 bytes · 24 words
BIP39 Korean
최선 반지 하숙집 골목 시골 밥상 이슬 복습 접시 실패 경영 원인 초등학생 논쟁 열차 이웃 친구 작업 무용 유산 해당 특성 오로지 번개
75 characters · 179 bytes · 24 words

Counts include spaces and separators. Bytes use UTF-8. Checksum is optional.

Comparison font: HangulIO Compare, adapted from Adobe Source Han Mono K. Used to compare character counts at equal Korean and Latin widths. Download font (OTF + WOFF2) ↓ OFL 1.1

Byte mapping

Revision 13 · 256 syllablesCSV ↓

One byte, one syllable. Use this table in your own code.

Hexadecimal row + column: F0 + 01 = F1. Scroll sideways to see all columns.

HanBase256 golden byte mapping, revision 13.
HEX+00+01+02+03+04+05+06+07+08+09+0A+0B+0C+0D+0E+0F
00가갈감강개거건검결경고곡골곰공과
10관광교구국군굴권귀그극근금기길김
20나난남내너노농누니다단달당대더덕
30도돈돌동두드들등디라란러레력로론
40루리린마만말망매머면명모목무문물
50미민밀바반발방배백버번벌범변병보
60봄봉부북분불비빈사산살삼상색생서
70석선설섬성세소속손솔송수순술스승
80시식신실심아악안알암야약양어언엄
90에여역연열영오온와왕외요용우운울
A0원월위유육윤은이인일임자작장저적
B0전절점정제조종주준중지직진짐차참
C0창처천철청체초촌총최추축출충치친
D0침카칼커코쿠크키타탄탈태터토통투
E0트티파판팔퍼편평표푸풍피필하학한
F0항해행향허현형호혼홍화환황회후히

Standard libraries

Python and JavaScript with the standard mapping and checksum.

Code examples
hanbase256
import hashlib
import hanbase256

digest = hashlib.sha256(
    b"The quick brown fox jumps over the lazy dog"
).digest()
encoded = hanbase256.encode_with_checksum(digest)

# Recover the original hash.
assert hanbase256.decode_with_checksum(encoded) == digest
print(hanbase256.decode_with_checksum(encoded).hex())

FAQ

Who is it for?

For Korean readers. Use it mainly for copy/paste, and type it when needed.

Why 256 syllables?

English has 26 letters. Hangul has 11,172 modern syllables. We use 256 familiar ones. 256 = 2⁸, so each syllable holds one byte. Unicode ↗

How does it compare to Hexadecimal and Base64/85?

Base64/85 prioritize compact text. HanBase256 balances length and typability for Korean readers. One syllable represents one byte. Base16 / Base64 ↗

How does it compare to BIP39?

BIP39 represents 256 bits with 24 words. HanBase256 uses 32 syllables, with an optional checksum. BIP39 ↗

What does the converter do?

Encoder hashes your text and compares formats. Decoder recovers the SHA-256 hash, not the original text.

Is it encryption or compression?

Neither. It changes how a hash is written. 32 syllables use 96 UTF-8 bytes. The checksum is extra. Base64 is not compression either.

What is +checksum?

The extra syllable helps catch errors. Decoding accepts 32 syllables without it. If a checksum is present, it is verified. A wrong checksum shows an error.