/base256unicode

Simple C++ sample program to represent binary data in base 256 Unicode (B256U) encoding.

Primary LanguageC++Creative Commons Zero v1.0 UniversalCC0-1.0

Base 256 Unicode (B256U) Encoding

This repo contains a simple C++ program to represent binary data in B256U encoding.

What is B256U Encoding?

Each Unicode character represents exactly one byte (and vice versa: each byte is represented by one Unicode character) - dead simple. The B256U alphabet of 256 possible Unicode characters consists of:

  1. the 10 digits (0...9)
  2. the 26 uppercase letters (A...Z) and the 26 lowercase letters (a...z)
  3. the 194 umlaut characters (À, Á, Â, Ã, Ä, Å, ...)

Typical use cases for B256U encoding are safe passwords, file checksums, identifiers and hashes.

Advantages of B256U Encoding

  • it's short: just 16 Unicode characters represent 128-bit of data, 32 characters represent 256-bit of data
  • it's safe: people are forced to copy & paste it
  • it's easy to implement: see the source code
  • it's easy to recognize: lots of umlauts (see the examples below)
  • it supports double-click for copy & paste (no terminal characters in B256U)
  • it's backward compatible: B256U uses Unicode 1.0 only (highest code point used is 385)

Installation

First download und unzip the code (see green button), or execute: git clone https://github.com/fleschutz/base256unicode

Then execute in a terminal window: (requires cmake and a C++ compiler)

> cd base256unicode
> cmake .
> make
> ./base256

Examples of 128-bit of data in B256U Encoding

  • ĺËĀ8Ę3ĩŔá0VzœĹŀî
  • ŽTĭŊõł3ÐÑęGųĢÛąĶ
  • 5iŗ3īÛźUKĺŰÑÞbŒŜ
  • ņĨqvLŀŠsůØŸÙGCŰƀ
  • ŋôBĉOÍŬįēijmōįUĞÜ
  • Sőś6ŬŹŠęűöìÇthTK

Examples of 256-bit of data in B256U Encoding

  • ħŅŹĬšÝŋţĀĸĻňőċqâĮŹúŪßWPŞÓā8æťÁüċ
  • Ě2ħŤRŧáÃĆĶ2ÕŀSŜöĄPŞÜbŰ06lŔùö9ĬŒģ
  • āLë2lÏäöĥųŧpğĨķŇHĺ4LăsŸđĵ_űLeYhĩ
  • ÂŚÔJàįŶļcvàPĈčIJċĉIJĂūęŻÉĢJĸķ3ğPĭŠ

How long does it take to break a random key or password?

Trying every possible key or password (called a 'brute force attack') at one billion attempts per second:

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

Feedback

Send your email feedback to: markus.fleschutz [at] gmail.com

License & Copyright

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