Skip to the content.

Base256 Encoding in Unicode (base256U)

This repository contains a C++ sample implementation to represent binary data in base256 encoding by using Unicode characters. Typical use cases are representation of: safe passwords, digital keys, 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

🎉 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%

🔧 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

The program writes a list of safe passwords (random 128 bits) in base256U encoding. Please use double-clicking and copy & paste.

🎉 Other Use-Cases

Safe Password/Key Sizes

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

Key Size Key Example Max Wait Time @ 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ėëŷò forever

🤝 Contributing

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