PySubCipher allows you to encode and decode strings of text using a substitution cipher algorithm.
Project description
PySubCipher
pysubcipher is a python module build on Python 3.10 which allows users to encrypt and decrypt strings of text using a basic substitution cipher algorithm.
Installation
Tested on Python 3.9 and above.
No requirements apart from the standard module.
pip install pysubcipher
python3 -m pip install pysubcipher
Example Usage
Encrypting and decrypting a short string of text
from pysubcipher import SubstitutionCipher
subcipher = SubstitutionCipher()
my_text = "Hello, World!"
encrypted_text = subcipher.encrypt(my_text)
decrypted_text = subcipher.decrypt(encrypted_text)
print(encrypted_text)
print(decrypted_text)
Output
b'e41BF3d8ebD5c0F34D2ce0caC5FCD2fbFAc576aB91bFAc576aB91E38cD3Da83deCEa8eeafc5AD23FC63Bacc983cBBFe02D4eAb46DeCaabd4E5Dda1E38cD3Da83deCEa8eeaDa487daD01Afe0abFAc576aB91F557edbaBe4e6052F0B41C11184'
b'Hello, World!'
SubstitutionCipher
"""A simple substitution cipher encryption tool to encode strings of text.
Args:
min_key_length (int): The minimum length of a cipher key
max_key_length (int): The maximum length of a cipher key
seed (Any | None, optional): The seed that cipher keys will be generated with. Defaults to os.urandom(1024).
charset (str, optional): The character set that cipher keys will be generated with. Defaults to HEXDIGITS.
"""
Using built-in character sets
- BASE_2
- HEXDIGITS (Default)
- OCTDIGITS
- ALPHANUMERIC
Base 2 Example
from pysubcipher import SubstitutionCipher, BASE_2
subcipher = SubstitutionCipher(charset = BASE_2)
my_text = "Hello, World!"
encrypted_text = subcipher.encrypt(my_text)
decrypted_text = subcipher.decrypt(encrypted_text)
print(encrypted_text)
print(decrypted_text)
Output
b'100001111110110000010100001011011110101010100010110111101010101001111001011010110111000110100100000011110100010010001000001001111001011000001111001111101010110111101010101001111101101101001111001001010'
b'Hello, World!'
Using a custom character set
Character sets are provided as strings of text, and will be used to generate cipher keys.
Note: if the character set is not unique enough, an InvalidTokenFoundError will be raised as there would not be enough possible combinations to encrypt that string of text. For example, if you wanted to use BASE_2 as your character set, but only allowed for the minimum key length to be 3 and the maximum key length to be 4, there would not be enough combinations to account for the entirety of the string.
from pysubcipher import SubstitutionCipher
subcipher = SubstitutionCipher(charset = "abcde1234")
my_text = "Hello, World!"
encrypted_text = subcipher.encrypt(my_text)
decrypted_text = subcipher.decrypt(encrypted_text)
print(encrypted_text)
print(decrypted_text)
Output
b'accddb422a4bcc32bdaa2dd3b1beda34ecc32ed12134ecc32ed121cab4341d13d4b1dd32dbd1edebc2aac1b3cde1b1cedace3c1bcdacab4341d13d4b12ed3dcae1c2dbe4312ee34ecc32ed121bc4ab14112b2bb4a23e4c44c34bcdc12243e4'
b'Hello, World!'
Saving keys to a file
Saving keys can be useful if you intend on using the same cipher keys in different instances of your program.
"""Saves the current cipher keys to a file
Args:
file (str): The path to the file
truncate (bool, optional): If True, the file will be truncated before storing the keys. Defaults to False.
"""
from pysubcipher import SubstitutionCipher
subcipher = SubstitutionCipher()
subcipher.save_keys("cipher_keys.dat")
Loading keys into a SubstitutionCipher instance
"""Loads cipher keys into the instance
Args:
file (str): The path to the file where the keys are stored
Raises:
InvalidTokenFoundError: If the keys are not valid, an InvalidTokenFoundError will be raised
"""
from pysubcipher import SubstitutionCipher
subcipher = SubstitutionCipher()
subcipher.load_keys("cipher_keys.dat")
Setting a custom seed
If you don't intend on storing cipher keys in a file, you can always use a set seed so the cipher keys are the same every time.
Seeds will always be generated upon creating a new instance of the SubstitutionCipher class and will be set to os.urandom(1024).
from pysubcipher import SubstitutionCipher
subcipher = SubstitutionCipher()
subcipher.set_seed("my_amazing_seed")
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pysubcipher-2.0.1.tar.gz.
File metadata
- Download URL: pysubcipher-2.0.1.tar.gz
- Upload date:
- Size: 5.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.10.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1a93b186913ac3b538786ff95584c519545e51cacd1677d43d73b81957a14acc
|
|
| MD5 |
2e28bdbd30d30c2bb9ff8e03d5bcf075
|
|
| BLAKE2b-256 |
c280b6b33fbab6a2c1fdebe707fae51eb54355bbcec6549d3e6d940bf0004b7a
|
File details
Details for the file pysubcipher-2.0.1-py3-none-any.whl.
File metadata
- Download URL: pysubcipher-2.0.1-py3-none-any.whl
- Upload date:
- Size: 6.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.10.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
36d4b12ac21e5fba2321e617f3f526fa507a025a9a7b405d68d3d91c33926195
|
|
| MD5 |
fe72cebc65bde454cb9d8801e1717071
|
|
| BLAKE2b-256 |
74b83ac6bbdfe8664567a7332d1e6255f817f6cb3d12854e19c257feb1d80bc7
|