Skip to the content.

Base256 Encoding in Unicode (base256U)

This repo contains a C++ sample implementation to represent binary data in base256 encoding by using Unicode characters. Typical use cases are representing safe passwords, digital keys, file checksums, identifiers, hashes, extremely big numbers, or data in character-limited messengers.

CMake on multiple platforms

What is base256U?

Each byte is represented by exactly one Unicode character (and vice versa). The mapping of byte to Unicode is dead simple:

Byte Unicode Character Comment
0-9 ‘0’-‘9’ the 10 digits
10-35 ‘A’-‘Z’ the 26 uppercase letters
36-61 ‘a’-‘z’ the 26 lowercase letters
62-255 ‘À’, ‘Á’, ‘Â’, ‘Ã’, ‘Ä’, … the 194 accent letters

✔️ Advantages

🔧 Installation

Execute in a terminal window: (C++ compiler and cmake required)

> git clone https://github.com/fleschutz/base256U  # or download & unzip the ZIP file (click the green button)
> cd base256U/src
> cmake .
> make
> ./base256U

🎉 Examples

⚖️ Comparison of Encoding Standards

Base Name Alphabet Example Byte Overhead
2 Binary 0 or 1 0101101 800%
8 Octal 0-7 7734124  
10 Decimal 0-9 3849834  
16 Hexadecimal 0-9,a-f (case insensitive) 7a9ff34 100%
32 Base32 A-Z,2-7 S7FFQZB 60%
36 Base36 0-9,A-Z 7RT99XQ  
45 Base45 0-9,A-Z,space,$,%,*,+,-,.,/,: 8X%/9:A  
64 Base64 A-Z,a-z,0-9,+,- zA8r+8q 33%/37%
85 Base85 !,”,#,…,z 9jqo 25%
256 Base256U 0-9,A-Z,a-z,accent letters ĘśŃäŞŰÀ ~75%

Password/Key Size

Required is a really random password or a random key (to rule out dictionary attacks). Then trying every possible key or password (called a ‘brute force attack’) at one billion attempts per second:

Key Size Key Example Max Time Needed @ 1B attempts/sec
40-bit ŞŰÀ8Œ about 9 minutes
56-bit ŖÔńĪ7ėñ about a year
128-bit ĤŗwĹĦñŧīijēaqöĜĖŅ about 5,783,128,169,837,158,197,871 years
256-bit ÿőMêŽĖiĘśŃäŞŰÀ8ŒŽĎäPfSŖÔńiĪ7ėëŷò never, for all practical purposes

🤝 Contributing

This open source project is licensed under the CC0 license. All trademarks are the property of their respective owners.