
Product
Reachability for Ruby Now in Beta
Reachability analysis for Ruby is now in beta, helping teams identify which vulnerabilities are truly exploitable in their applications.
securitylib
Advanced tools
The SAPO Security Lib is a library whose purpose is to provide functions/classes that solve common security related problems, while being easy to use even by those who are not security experts. This repository contains the Python version of this library.
Our design principles:
generate_encryption_key, encrypt, prepare_password_for_storage, etc.
which most developers are able to understand even if they are not security
experts.There are currently 4 modules in this library:
Some examples of use cases for each of these modules are given below.
For the full documentation of the library, go here.
Please file any bugs you find in our issue tracker.
You should change version in setup.py when upgrading
Upgraded to support from Python 3.5 to 3.12. There are several ways to install SAPO Security Lib.
Just run:
pip install securitylib
python setup.py installGenerating a key for encryption:
import securitylib
encryption_key = securitylib.crypto.generate_encryption_key()
print(encryption_key)
Generating a key for encryption based on a user's password:
import securitylib
password = 'this_is_the_users_password'
salt = securitylib.random.get_random_token()
encryption_key = securitylib.crypto.generate_encryption_key_from_password(password, salt)
print(encryption_key)
Encrypting and decrypting data:
import securitylib
data = 'this_is_the_data_we_want_to_encrypt'
encryption_key = securitylib.crypto.generate_encryption_key()
authenticator_key = securitylib.crypto.generate_authenticator_key()
encrypted_data = securitylib.crypto.encrypt(data, encryption_key, authenticator_key)
decrypted_data = securitylib.crypto.decrypt(encrypted_data, encryption_key, authenticator_key)
assert(decrypted_data == data)
Using a stream cipher to encrypt or decrypt a stream:
import securitylib
data_chunks = ['this_is_', 'the_data', '_we', '_want_to_', 'encrypt']
encryption_key = securitylib.crypto.generate_encryption_key()
# Data can be encrypted chunk by chunk
stream_cipher = securitylib.advanced_crypto.StreamCipher(encryption_key)
encrypted_data = ''.join(stream_cipher.encrypt(chunk) for chunk in data_chunks)
# Decryption can also happen chunk by chunk. Here we are decrypting the whole
# stream at once just to check that we get the original data back.
stream_cipher2 = securitylib.advanced_crypto.StreamCipher(encryption_key)
decrypted_data = stream_cipher2.decrypt(encrypted_data)
original_data = ''.join(data_chunks)
assert(decrypted_data == original_data)
Generating random values using a secure source of randomness:
import securitylib
random_bytes = securitylib.random.get_random_bytes(length=16)
random_integer = securitylib.random.get_random_integer(min_result=1000, max_result=9999)
random_string = securitylib.random.get_random_string(length=100, charset='abcdefghijklmnopqrstuvwxyz')
random_GUID = securitylib.random.get_random_GUID()
print(random_bytes, random_integer, random_string, random_GUID)
Generating a random password:
import securitylib
password = securitylib.passwords.generate_password(length=12, lower=True, upper=True, digits=True, special=True, ambig=True)
print(password)
Getting a password's strength (between 0 and 100):
import securitylib
print(securitylib.passwords.get_password_strength('123456'))
print(securitylib.passwords.get_password_strength('thisismypassword'))
print(securitylib.passwords.get_password_strength('this is my password'))
print(securitylib.passwords.get_password_strength('u6fm08xw@RLs'))
print(securitylib.passwords.get_password_strength('This 1s My P4ssword...'))
Validate a user's password against a list of rules:
import securitylib
password = 'this_is_the_users_password'
error_list = securitylib.passwords.validate_password(password, min_length=12, min_lower=1, min_upper=1, min_digits=1, min_special=1, min_strength=50)
print(error_list)
FAQs
SAPO Security Lib - Python
We found that securitylib demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 4 open source maintainers collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Product
Reachability analysis for Ruby is now in beta, helping teams identify which vulnerabilities are truly exploitable in their applications.

Research
/Security News
Malicious npm packages use Adspect cloaking and fake CAPTCHAs to fingerprint visitors and redirect victims to crypto-themed scam sites.

Security News
Recent coverage mislabels the latest TEA protocol spam as a worm. Here’s what’s actually happening.