Ciphers¶
This module provides simple usage of functions related to a list of ciphers
Ciphers crypyto supports:
- Polybius Square
- Atbash
- Caesar Cipher
- ROT13
- Affine Cipher
- Rail Fence Cipher
- Keyword Cipher
- Vigenère Cipher
- Beaufort Cipher
- Gronsfeld Cipher
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 1ValueError
– Whenwidth * height
is smaller thanlen(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
– Whencipher
doesn’t match the Polybius Square patternExamples
>>> 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'
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 stdoutExamples
>>> 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 fromself.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 fromself.key
Examples
>>> from crypyto.ciphers import Caesar >>> caesar = Caesar(key=5) >>> caesar.encrypt('Hello, world!') 'MJQQT, BTWQI!'
ROT13¶
A
Caesar
object with defaultkey
value of13
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 tolen(abc)
- b (int) – Value of
b
- abc (str) – The alphabet used in the cipher. Defaults to
string.ascii_uppercase
Raises:
ValueError
– Ifa
is not coprime tolen(abc)
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
– Whendirection
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 stdoutExamples
>>> 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
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
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!'