StringThing
StringThing is a lightweight library for encoding and decoding strings using various patterns.
Installation
StringThing has no external dependencies, so it can be installed from source or directly from PyPI:
pip install string-thing
Usage
StringThing provides an API for encoding and decoding strings. To use it, import the StringThing class and create a new instance with an array of patterns in the order you want to use them:
from string_thing import StringThing
my_string = 'This is my string'
# Create a new instance of StringThing with default pattern (['split-halves', 'reverse', 'shift', 'swap-case', 'rotate'])
my_string_thing = StringThing()
# Encode the string
encoded = my_string_thing.encode(myString)
# Output the encoded string
print(encoded) # "ZN!TJ!TJIuHOJSUT!"
# Decode the string
decoded = my_string_thing.decode(encoded)
# Output the decoded string
print(decoded) # "This is my string"
Patterns
StringThing patterns currently support the following operations:
split-halves: Splits the string into two halves and swaps them.Abcd12=>d12Abc
reverse: Reverses the order of the characters in the string.Abcd12=>21dcbA
shift: Shifts the characters in the string up by 1 in the ASCII table.Abcd12=>Bcde23
swap-case: Swaps uppercase & lowercase characters in the string.Abcd12=>aBCD12
rotate: Shifts the string 1 position to the right.Abcd12=>2Abcd1
To use a specific pattern, pass it as an argument to the StringThing constructor:
from string_thing import StringThing
my_string_thing_1 = StringThing(['split-halves', 'shift', 'reverse', 'shift', 'swap-case', 'rotate'])
# OR
string_thing_pattern = ['split-halves', 'shift', 'reverse', 'shift', 'swap-case', 'rotate']
my_string_thing_2 = StringThing(string_thing_pattern)
Example: Encoding Passwords for Secure Storage
StringThing can be used to encode passwords before hashing them and storing them in a database, making it more difficult for an attacker to retrieve the original password even if they gain access to the database.
Here's an example of how to use StringThing to encode a password before hashing it with bcrypt when working with passwords in a database:
Create User:
import bcrypt
from string_thing import StringThing
string_thing_pattern = ['split-halves', 'shift', 'reverse', 'shift', 'swap-case', 'rotate']
# Generate a salt for the bcrypt hash
salt = bcrypt.gensalt()
# The original password to be encoded and hashed
password = 'myPassword123'
# Encode the password using StringThing
encoded_password = StringThing(string_thing_pattern).encode(password)
# Hash the encoded password with bcrypt
hashed_password = bcrypt.hashpw(encoded_password, salt)
# Add the hashed password to a user object for storage in a database
user = {
'username': 'johndoe',
'email': 'johndoe@example.com',
'password': hashed_password,
# other user data...
}
# Add the user object to the database
my_database.add_user(user)
Authenticate User:
import bcrypt
from string_thing import StringThing
string_thing_pattern = ['split-halves', 'shift', 'reverse', 'shift', 'swap-case', 'rotate']
# Retrieve the user's hashed password from the database
user = my_database.get_user_by_username('johndoe')
hashed_password = user.password
# The password entered by the user attempting to log in
password_attempt = 'myPassword123'
# Encode the password attempt using StringThing
encoded_password_attempt = StringThing(string_thing_pattern).encode(password_attempt)
# Compare the encoded password attempt to the stored hashed password
if bcrypt.checkpw(encoded_password_attempt, hashed_password):
# Passwords match - login successful!
else:
# Passwords do not match - login failed
Metadata
Release files for string-thing 1.0.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| string_thing-1.0.1.tar.gz | 3.9 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| string_thing-1.0.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 7.6 kB
Release files / string_thing-1.0.1.tar.gz
| Download URL | string_thing-1.0.1.tar.gz |
|---|---|
| Size | 3.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
154236f2365093645d80d212ecff51177abedf828bedfd4faa911c1bd90f3e66
|
|
BLAKE2b-256 checksum How to use checksums |
94d889c11b2555b2418fc9e12cf397e63da4daf11500316fb88bf86631cc4863
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/4.0.2 CPython/3.11.4
|
Release files / string_thing-1.0.1-py3-none-any.whl
| Download URL | string_thing-1.0.1-py3-none-any.whl |
|---|---|
| Size | 3.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
d9d2f1abe35f84f237aca5d1bc2dd4060585998715fc694825f887dbcee70acd
|
|
BLAKE2b-256 checksum How to use checksums |
430daa9515df056713a991e1a55050c07cf79ba832bc54b50febf8374bba0289
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/4.0.2 CPython/3.11.4
|
Security for string-thing 1.0.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.