Features

Ciphers

Keys

  • You can use different keys for each cipher to get different encodings.
  • You can also view the full cipher’s encoding with the key used.

full-cipher

Encoding

Real-time Encoding

Encode your text while typing without the need to press any button. Change anything (cipher, key, chars/words delimiter or shape format) and the changes will be reflected instantly.

real-time

Output Styles

Customize your output depending on your preferences. Change the chars/words delimiters and their spacing or the fill and stroke of shapes.

output-styles

Audio Output

Export audio output for your Morse encoding with different speeds (slow - medium - fast).

audio-speeds

Design

Light/Dark Themes

Choose the theme that makes you more comfortable.

themes

Responsive Layout

Choose whatever size you like. You can either use it in full screen or side by side with any other window.

responsive

Material Design

Designed with Google’s material design standards using Material Design In XAML Toolkit.

Code

Clean Code

Readable and easy to maintain OOP code using XAML and C#. Adding Ciphers is so easy, anyone can add them even if he doesn’t know how to code! Just add the cipher type you want, from the types below, to ciphers array and the rest is done for you.

Check out the following pre-declared ciphers from that link.


// 1] Normal Cipher:
new Cipher
{
    DisplayName = "اسم_الشفرة", // Add Cipher Name Here (displayed in Ciphers ComboBox)
    HasKeys = true,              // Enables Keys ComboBox
    KeyWeight = n,               // Offsets Keys with the given value (n) where:  0 < n < 28
    IsAudible = true,            // Enables Audio Button
    HasShapes = true,            // Enables Shape Format Button
    CipherCharacters = {"x", "x", "x", "x", "x", "x", "x",  // Add Cipher body Here.
                        "x", "x", "x", "x", "x", "x", "x",  // Must contain 28 values,
                        "x", "x", "x", "x", "x", "x", "x",  // written in an array form
                        "x", "x", "x", "x", "x", "x", "x"}
},

// 2] Overloaded Cipher:
new Cipher
{
    DisplayName = "اسم_الشفرة", // Add Cipher Name Here (displayed in Ciphers ComboBox)
    HasOverloads = true,         // Don't declare any key-related property or CipherCharacters property
    Overloads = new List<Cipher> // Overloads appear in Keys ComboBox, and are initialized as a list
    {
        new Cipher
        {
            DisplayName = "اسم 1", // First overload name (displayed in Keys ComboBox)
            CipherCharacters = {"x", "x", "x", "x", "x", "x", "x", // Add First overload body Here.
                                "x", "x", "x", "x", "x", "x", "x", // Must contain 28 values,
                                "x", "x", "x", "x", "x", "x", "x", // written in an array form
                                "x", "x", "x", "x", "x", "x", "x"}
        },

        new Cipher
        {
            DisplayName = "اسم 2", // Second overload name (displayed in Keys ComboBox)
            CipherCharacters = {"x", "x", "x", "x", "x", "x", "x", // Add Second overload body Here.
                                "x", "x", "x", "x", "x", "x", "x", // Must contain 28 values,
                                "x", "x", "x", "x", "x", "x", "x", // written in an array form
                                "x", "x", "x", "x", "x", "x", "x"}
        }
    }
},

Open Source

Source code is available on Github. Open for contributions and improvements.

Feature Request

The feature you are searching for isn’t mentioned?
Request your desired feature now!

via E-Mail via GitHub