Wolfram Research

Function Repository Resource:

ChaoCipher

Source Notebook

Encipher a string using the Chaocipher

Contributed by: Sander Huisman

ResourceFunction["ChaoCipher"][string,{αp,αp}]

enciphers string using the plain text alphabet αp and the cipher alphabet αc.

Details and Options

The alphabets αp and αc should be a permutation of the letters A-Z.
Any other letter than a-z and A-Z in string is ignored.
The output is in capital letters.
ResourceFunction["ChaoCipher"] works by encoding each character in string using the following steps (“MATHEMATICA” will be used as the input string throughout this example):
The character “M” is looked up in the plain alphabet (top), and one finds the corresponding letter in the cipher alphabet (bottom):

the encoded letter is therefore "A".

Both alphabets are shifted to the left such as to bring the red letters to the front:

The plain alphabet (top) is shifted one more to the left:

Move the 3rd letter of the plain alphabet (top) and the 2 letter of the cipher alphabet (bottom) to the 14th position.

Continue with the next letter using the new alphabets:

Examples

Basic Examples

Encipher a piece of text using unshuffled plain and cipher alphabets:

In[1]:=
ResourceFunction[
 "ChaoCipher"]["HELLO WORLD", {CharacterRange["a", "z"], CharacterRange["a", "z"]}]
Out[1]=

Encode a ‘constant’ string:

In[2]:=
ResourceFunction[
 "ChaoCipher"]["AAAAAAAAAAAAAAAAAAAAAA", {CharacterRange["a", "z"], CharacterRange["a", "z"]}]
Out[2]=

Scope

Use random plain and cipher alphabets:

In[3]:=
pa = {"L", "Z", "G", "U", "Q", "A", "X", "B", "J", "R", "T", "F", "D",
    "K", "E", "N", "Y", "P", "S", "O", "C", "M", "W", "I", "H", "V"};
ca = {"G", "W", "Z", "J", "P", "Q", "V", "R", "D", "C", "H", "X", "S",
    "U", "T", "K", "M", "E", "O", "F", "Y", "A", "I", "L", "N", "B"};
encoded = ResourceFunction["ChaoCipher"]["Mathematica is awesome", {pa, ca}]
Out[5]=

Properties and Relations

ChaoDecipher can be used to reverse the encryption. First encode a piece of string:

In[6]:=
pa = "PTLNBQDEOYSFAVZKGJRIHWXUMC" // Characters;
ca = "HXUCZVAMDSLKPEFJRIGTWOBNYQ" // Characters;
encoded = ResourceFunction["ChaoCipher"][
  "WELLDONEISBETTERTHANWELLSAID", {pa, ca}]
Out[6]=

Now we can decipher it:

In[7]:=
ResourceFunction["ChaoDecipher"][encoded, {pa, ca}]
Out[7]=

Possible Issues

Letters with diacritics are ignored:

In[8]:=
ResourceFunction[
 "ChaoCipher"]["piñata", {CharacterRange["a", "z"], CharacterRange["a", "z"]}]
Out[8]=

Use RemoveDiacritics to remove the diacritics:

In[9]:=
ResourceFunction["ChaoCipher"][
 RemoveDiacritics["piñata"], {CharacterRange["a", "z"], CharacterRange["a", "z"]}]
Out[9]=

Resource History

Source Metadata

Related Resources

License Information