Ciphers

This module provides simple usage of functions related to a list of ciphers

Ciphers crypyto supports:

Polybius Square

class crypyto.ciphers.PolybiusSquare(width, height, abc='ABCDEFGHIJKLMNOPQRSTUVWXYZ', ij=True)[source]

PolybiusSquare represents a Polybius Square cipher manipulator

Parameters:
  • width (int) – The square’s width. Must be at least 1. Width times height must be greater than the alphabet length
  • height (int) – The square’s height. Must be at least 1. Height times width must be greater than the alphabet length
  • abc (str) – The alphabet used in the square. Defaults to string.ascii_uppercase
  • ij (bool) – Whether ‘i’ and ‘j’ are treated as the same letter. Defaults to True
Raises:
  • ValueError – When width is smaller than 1
  • ValueError – When width * height is smaller than len(abc)
decrypt(cipher)[source]

Returns decrypted cipher (str)

Parameters:cipher (str) – The cipher to be decrypted. May or may not contain the square size at the beggining (e.g. ‘5x5#’)
Raises:ValueError – When cipher doesn’t match the Polybius Square pattern

Examples

>>> from crypyto.ciphers import PolybiusSquare
>>> ps = PolybiusSquare(5, 5)
>>> ps.decrypt('5x5#5-1;3-3;3-1;2-4;4-5;5-3;4-4;5-1;4-1;2-3;5-1;3-4;3-4;1-1;2-2;5-1')
'ENCRYPTEDMESSAGE'
encrypt(text)[source]

Returns encrypted text (str)

Parameters:text (str) – The text to be encrypted

Examples

>>> from crypyto.ciphers import PolybiusSquare
>>> ps = PolybiusSquare(5, 5)
>>> ps.encrypt('EncryptedMessage')
'5x5#5-1;3-3;3-1;2-4;4-5;5-3;4-4;5-1;4-1;2-3;5-1;3-4;3-4;1-1;2-2;5-1'

Atbash

class crypyto.ciphers.Atbash(abc='ABCDEFGHIJKLMNOPQRSTUVWXYZ')[source]

Atbash represents an Atbash cipher manipulator

Parameters:abc (str) – The alphabet used in the cipher. Defaults to string.ascii_uppercase
decrypt(cipher, decode_unicode=True)[source]

Returns decrypted text (str)

Parameters:
  • cipher (str) – The cipher to be decrypted
  • decode_unicode (bool) – Whether the cipher should have unicode characters converted to ascii before decrypting. Defaults to True

Examples

>>> from crypyto.ciphers import Atbash
>>> atbash = Atbash()
>>> atbash.decrypt('SVOOL, DLIOW!')
'HELLO, WORLD!'
encrypt(text, decode_unicode=True)[source]

Returns encrypted text (str)

Parameters:
  • text (str) – The text to be encrypted
  • decode_unicode (bool) – Whether the text should have unicode characters converted to ascii before encrypting. Defaults to True

Examples

>>> from crypyto.ciphers import Atbash
>>> atbash = Atbash()
>>> atbash.encrypt('Hello, world!')
'SVOOL, DLIOW!'

Caesar Cipher

class crypyto.ciphers.Caesar(abc='ABCDEFGHIJKLMNOPQRSTUVWXYZ', key=1)[source]

Caesar represents a Caesar cipher manipulator

Parameters:
  • abc (str) – The alphabet used in the cipher. Defaults to string.ascii_uppercase
  • key (int) – The key to initialize the cipher manipulator. Defaults to 1
brute_force(cipher, decode_unicode=True, output_file=None)[source]

Prints (to stdout or specified file) all possible results

Parameters:
  • cipher (str) – The cipher to be decrypted
  • decode_unicode (bool) – Whether the cipher should have unicode characters converted to ascii before decrypting. Defaults to True
  • output_file (str|None) – The filename of the file the results are gonna be printed. Defaults to None, which indicated printing on stdout

Examples

>>> from crypyto.ciphers import Caesar
>>> caesar = Caesar()
>>> caesar.brute_force('MJQQT, BTWQI!')
NKRRU, CUXRJ!
OLSSV, DVYSK!
...
HELLO, WORLD!
IFMMP, XPSME!
...
decrypt(cipher, decode_unicode=True, key=None)[source]

Returns decrypted cipher (str)

Parameters:
  • cipher (str) – The cipher to be decrypted
  • decode_unicode (bool) – Whether the cipher should have unicode characters converted to ascii before decrypting. Defaults to True
  • key (int|None) – The key used to decrypt. Defaults to None, which uses the value from self.key

Examples

>>> from crypyto.ciphers import Caesar
>>> caesar = Caesar(key=5)
>>> caesar.decrypt('MJQQT, BTWQI!')
'HELLO, WORLD!'
encrypt(text, decode_unicode=True, key=None)[source]

Returns encrypted text (str)

Parameters:
  • text (str) – The text to be encrypted
  • decode_unicode (bool) – Whether the text should have unicode characters converted to ascii before encrypting. Defaults to True
  • key (int|None) – The key used to encrypt. Defaults to None, which uses the value from self.key

Examples

>>> from crypyto.ciphers import Caesar
>>> caesar = Caesar(key=5)
>>> caesar.encrypt('Hello, world!')
'MJQQT, BTWQI!'

ROT13

A Caesar object with default key value of 13

Examples:

>>> from crypyto.ciphers import ROT13
>>> ROT13.encrypt('Hello, world!')
'URYYB, JBEYQ!'
>>> ROT13.encrypt('URYYB, JBEYQ!')
'HELLO, WORLD!'

Affine Cipher

class crypyto.ciphers.Affine(a, b, abc='ABCDEFGHIJKLMNOPQRSTUVWXYZ')[source]

Affine represents an Affine cipher manipulator

Parameters:
  • a (int) – Value of a. Must be coprime to len(abc)
  • b (int) – Value of b
  • abc (str) – The alphabet used in the cipher. Defaults to string.ascii_uppercase
Raises:

ValueError – If a is not coprime to len(abc)

decrypt(cipher)[source]

Returns decrypted cipher (str)

Parameters:cipher (str) – Cipher to be decrypted

Examples

>>> from crypyto.cipher import Affine
>>> af = Affine(a=5, b=8)
>>> af.decrypt('RCLLA, OAPLX!')
'HELLO, WORLD!'
encrypt(text)[source]

Returns encrypted text (str)

Parameters:text (str) – Text to be encrypted

Examples

>>> from crypyto.cipher import Affine
>>> af = Affine(a=5, b=8)
>>> af.encrypt('Hello, world!')
'RCLLA, OAPLX!'

Rail Fence Cipher

class crypyto.ciphers.RailFence(n_rails, only_alnum=False, direction='D')[source]

RailFence represents a Rail Fence cipher manipulator

Parameters:
  • n_rails (int) – Number of rails
  • only_alnum (bool) – Whether the manipulator will only encrypt alphanumerical characters. Defaults to False
  • direction (str) – Default direction to start zigzagging. Must be 'D' (Downwards) or 'U' (Upwards). Defaults to 'D'
Raises:

ValueError – When direction doesn’t start with 'U' or 'D'

brute_force(cipher, output_file=None)[source]

Prints (to stdout or specified file) all possible decrypted results

Parameters:
  • cipher (str) – The cipher to be decrypted
  • output_file (str|None) – The filename of the file the results are gonna be printed. Defaults to None, which indicated printing on stdout

Examples

>>> from crypyto.ciphers import RailFence
>>> rf = RailFence(n_rails=1, only_alnum=True)
>>> rf.decrypt('WECRLTEERDSOEEFEAOCAIVDEN')
There are 46 possible results. You can specify an output file in the parameter output_file
Are you sure you want to print them all (Y/N)?
Y
WEEFCERALOTCEAEIRVDDSEONE
WEAREDISCOVEREDFLEEATONCE
...
NEDVIACOAEFEEOSDREETREWCL
NEDVIACOAEFEEOSDREETLREWC
decrypt(cipher)[source]

Returns decrypted cipher

Parameters:cipher (str) – The cipher to be decrypted

Examples

>>> from crypyto.cipher import RailFence
>>> rf = RailFence(n_rails=3, only_alnum=True)
>>> rf.decrypt('WECRLTEERDSOEEFEAOCAIVDEN')
'WEAREDISCOVEREDFLEEATONCE'
encrypt(text)[source]

Returns encrypted text (str)

Parameters:text (str) – The text to be encrypted

Examples

>>> from crypyto.cipher import RailFence
>>> rf = RailFence(n_rails=3, only_alnum=True)
>>> rf.encrypt('WE ARE DISCOVERED. FLEE AT ONCE')
'WECRLTEERDSOEEFEAOCAIVDEN'

Keyword Cipher

class crypyto.ciphers.Keyword(key, abc='ABCDEFGHIJKLMNOPQRSTUVWXYZ')[source]

Keyword represents a Keyword Cipher manipulator

Parameters:
  • key (str) – The keyword to encrypt/decrypt
  • abc (str) – The alphabet used in the cipher. Defaults to string.ascii_uppercase
decrypt(cipher)[source]

Returns decrypted cipher (str)

Parameters:cipher (str) – Cipher to be decrypted

Examples

>>> from crypyto.ciphers import Keyword
>>> kw = Keyword('secret')
>>> kw.decrypt('BEHHK, VKNHR!')
'HELLO, WORLD!'
encrypt(text)[source]

Returns encrypted text (str)

Parameters:text (str) – Text to be encrypted

Examples

>>> from crypyto.ciphers import Keyword
>>> kw = Keyword('secret')
>>> kw.encrypt('Hello, world!')
'BEHHK, VKNHR!'

Vigenère Cipher

class crypyto.ciphers.Vigenere(key, abc='ABCDEFGHIJKLMNOPQRSTUVWXYZ', decode_unicode_key=True)[source]

Vigenere represents a Vigenère Cipher manipulator

Parameters:
  • key (str) – The key to encode/decode
  • abc (str) – The alphabet the cipher will be based upon. Defauts to string.ascii.uppercase
  • decode_unicode_key (bool) – Whether the key should have unicode characters converted to ascii. Defaults to True
decrypt(cipher, decode_unicode=True)[source]

Returns decrypted cipher

Parameters:
  • cipher (str) – Cipher to be decrypted
  • decode_unicode (bool) – Whether the cipher should have unicode characters converted to ascii before decrypting. Defaults to True

Examples

>>> from crypyto.ciphers import Vigenere
>>> v = Vigenere('secret')
>>> v.decrypt('ZINCS, PGVNU!')
'HELLO, WORLD!'
encrypt(text, decode_unicode=True)[source]

Returns encrypted text (str)

Parameters:
  • text (str) – Text to be encrypted
  • decode_unicode (bool) – Whether the text should have unicode characters converted to ascii before encrypting. Defaults to True

Examples

>>> from crypyto.ciphers import Vigenere
>>> v = Vigenere('secret')
>>> v.encrypt('Hello, world!')
'ZINCS, PGVNU!'

Beaufort Cipher

class crypyto.ciphers.Beaufort(key, abc='ABCDEFGHIJKLMNOPQRSTUVWXYZ', decode_unicode_key=True)[source]

Beaufort represents a Beaufort Cipher manipulator

Parameters:
  • key (str) – The key to encode/decode
  • abc (str) – The alphabet the cipher will be based upon. Defauts to string.ascii.uppercase
  • decode_unicode_key (bool) – Whether the key should have unicode characters converted to ascii. Defaults to True
decrypt(cipher, decode_unicode=True)[source]

Returns decrypted cipher (str)

Parameters:
  • cipher (str) – The cipher to be decrypted
  • decode_unicode (bool) – Whether the cipher should have unicode characters converted to ascii before decrypting. Defaults to True

Examples

>>> from crypyto.ciphers import Beaufort
>>> b = Beaufort('secret')
>>> b.decrypt('LARGQ, XENRO!')
'HELLO, WORLD!'
encrypt(text, decode_unicode=True)[source]

Returns encrypted text (str)

Parameters:
  • text (str) – The text to be encrypted
  • decode_unicode (bool) – Whether the text should have unicode characters converted to ascii before encrypting. Defaults to True

Examples

>>> from crypyto.ciphers import Beaufort
>>> b = Beaufort('secret')
>>> b.encrypt('Hello, world!')
'LARGQ, XENRO!'

Gronsfeld Cipher

class crypyto.ciphers.Gronsfeld(key, abc='ABCDEFGHIJKLMNOPQRSTUVWXYZ')[source]

Gronsfeld represents a Gronsfeld Cipher manipulator

Parameters:
  • key (str) – The key to encode/decode. Must contain only numerical characters (0-9)
  • abc (str) – The alphabet the cipher will be based upon. Defauts to string.ascii.uppercase
decrypt(cipher, decode_unicode=True)[source]

Returns decrypted cipher (str)

Parameters:
  • cipher (str) – The cipher to be decrypted
  • decode_unicode (bool) – Whether the text should have unicode characters converted to ascii before encrypting. Defaults to True

Examples

>>> from crypyto.ciphers import Gronsfeld
>>> g = Gronsfeld('2317')
>>> g.decrypt('JHMSQ, ZPYNG!')
'HELLO, WORLD!'
encrypt(text, decode_unicode=True)[source]

Returns encrypted text (str)

Parameters:
  • text (str) – The text to be encrypted
  • decode_unicode (bool) – Whether the text should have unicode characters converted to ascii before encrypting. Defaults to True

Examples

>>> from crypyto.ciphers import Gronsfeld
>>> g = Gronsfeld('2317')
>>> g.encrypt('Hello, world!')
'JHMSQ, ZPYNG!'