Modular online encoding, encryption and conversion tool and framework.
git clone -b dev git@github.com:cryptii/cryptii.git
npm install
gulp build
gulp test
gulp
This framework and web app tries to reflect a wide variety of ciphers, formats, algorithms and methods (called ‘bricks’) while keeping them easily combinable. There are two categories of bricks: encoders and viewers.
Encoders manipulate content by encoding or decoding it in a specific way and with given settings.
Name | Category | Description |
---|---|---|
text-transform |
Transform | Transforming character case and arrangement |
numeral-system |
Transform | Translates numerals between systems |
bitwise-operation |
Transform | Bitwise operations (NOT, AND, OR, …) |
spelling-alphabet |
Alphabets | Several spelling alphabets |
affine-cipher |
Simple Substitution | Affine Cipher |
↳ caesar-cipher |
Simple Substitution | Caesar cipher |
↳ atbash |
Simple Substitution | Atbash using latin or hebrew alphabet |
rot13 |
Simple Substitution | ROT13 incl. variants ROT5, ROT18 & ROT47 |
vigenere-cipher |
Simple Substitution | Vigenère cipher |
enigma |
Cipher machines | Enigma machine |
unicode-code-points |
Encoding | Encoding to Unicode code points in given format |
url-encoding |
Encoding | URL encoding / Percent-encoding |
base64 |
Encoding | Base64 incl. variants base64url, … |
ascii85 |
Encoding | Ascii85 / Base85 incl. variant Z85 |
morse-code |
Encoding | Morse code (English) |
integer |
Data types | Translates between bytes and integers |
hash |
Modern cryptography | Creating a message digest |
hmac |
Modern cryptography | Creating a Hash-based message authentication code |
Example usage in code:
let encoder = new ROT13Encoder()
encoder.setSettingValue('variant', 'rot47')
let result = encoder.encode('Hello World') // returns a Chain object
result.getString() // returns 'w6==@ (@C=5'
Viewers allow users to view and edit content in a specific way or format.
Name | Category | Description |
---|---|---|
text |
View | Viewing and editing in plain text |
bytes |
View | Viewing and editing bytes |
Chain objects encapsulate the actual content used and returned by encoders and viewers. This content can either be a string, an array of Unicode code points or a Uint8Array
of bytes.
Chains are immutable. You define its content by passing one of these representations as first argument to the constructor.
let a = new Chain('🦊🚀')
let b = new Chain([129418, 128640])
let c = new Chain(new Uint8Array([240, 159, 166, 138, 240, 159, 154, 128]))
Chain.isEqual(a, b, c) // returns true
The object handles the translation between these representations lazily for you. You can access any of these through getter and additional convenience methods.
let string = chain.getString()
let codePoints = chain.getCodePoints()
let bytes = chain.getBytes()