Welcome to crypyto’s documentation!¶
crypyto is a Python package that provides a set of cryptographic tools with simple use to your applications.
Getting Started¶
These instructions will get you a copy of the project up and running on your local machine for development and testing purposes.
Dependencies¶
Installing¶
The easiest way to install crypyto is by using pip:
pip install crypyto
You can also clone this repository using git
git clone https://github.com/yanorestes/crypyto.git
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 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. Defautls 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. Defautls 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. Defautls 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. Defautls 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. Defautls 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
Substitution Alphabets¶
This module provides simple usage of functions related to substitutions alphabets
Alphabets crypyto supports:
Morse Code¶
- class
crypyto.substitution_alphabets.
Morse
(word_splitter='/')[source]¶Morse represents a Morse Code manipulator
Parameters: word_splitter (str) – A string which will be used to indicate words separation. Defaults to '/'
decrypt
(cipher)[source]¶Returns translated cipher into plain text
Parameters: cipher (str) – The morse code to be translated into plain text Examples
>>> from crypyto.substitution_alphabets import Morse >>> morse = Morse() >>> morse.decrypt('.... . .-.. .-.. --- --..-- / .-- --- .-. .-.. -.. -.-.--') 'HELLO, WORLD!'
encrypt
(text)[source]¶Returns translated text into Morse Code (str)
Parameters: text (str) – The text to be translated into Morse Code Examples
>>> from crypyto.subsititution_alphabets import Morse >>> morse = Morse() >>> morse.encrypt('Hello, world!') '.... . .-.. .-.. --- --..-- / .-- --- .-. .-.. -.. -.-.--'
Image Substitution¶
- class
crypyto.substitution_alphabets.
ImageSubstitution
(abc, directory, extension)[source]¶ImageSubstitution is a base class which is used by all the image-based alphabets
Parameters:
- abc (str) – The plain text alphabet this image-based alphabet have a translation to
- directory (str) – The directory where the image files are located (inside this package ->
/static/directory/
)- extension (str) – The file extension the image files use
encrypt
(text, filename='output.png', max_in_line=30)[source]¶Creates an image file with the translated text
Parameters:
- text (str) – Text to be translated to the specified substitution alphabet
- filename (str) – The filename of the image file with the translated text. Defaults to
'output.png'
- max_in_line (int) – The max number of letters per line. Defaults to
30
Templar Cipher¶
Templar represents an
ImageSubstitution
object adjusted to the Templar CipherExamples:
>>> from crypyto.substitution_alphabets import Templar >>> Templar.encrypt('Hello, world!', 'templar_hello.png') >>> Templar.encrypt('Hello, world!', 'templar_hello_max.png', 5)templar_hello.png:
![]()
Encrypted hello world
templar_hello_max.png:
![]()
Encrypted hello world (5 letters per line)