Skip to main content

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)

Source distribution for string-thing 1.0.1
File Size Uploaded Provenance
string_thing-1.0.1.tar.gz 3.9 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for string-thing 1.0.1
File Interpreter ABI Platform
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.

Release history Release notifications | RSS feed

This release

1.0.1 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page