Security

Security is a top priority at pyEchoNext. We understand that some developers may neglect basic protection against vulnerabilities, and therefore we took care of the warning system, cryptography and protection against external threats.

Hashing

Hashing is the process of converting data into a unique string of a fixed length.

Our library supports basic hashing via PlainHasher and SaltedHasher. SaltedHasher is a modified version of the usual one, where “salt” is added to the hash. That is, the string “Hello” with the salt “bob” turns into “bobHello”. This helps get rid of hash collisions (the moment when the hashes of two different strings match). Hashing is usually used to store sensitive data, such as passwords.

pyechonext.security.hashing

Module responsible for hashing.

Hash-Algorithm

Enum class of hash algorithm. SHA256, SHA512, MD5, BLAKE2B, BLAKE2S are supported.

class HashAlgorithm(Enum):
   """
   This class describes a hash algorithms.
   """

   SHA256 = auto()
   SHA512 = auto()
   MD5 = auto()
   BLAKE2B = auto()
   BLAKE2S = auto()

PlainHasher

A simple class for hashing:

from pyechonext.security.hashing import HashAlgorithm, PlainHasher

hasher = PlainHasher(HashAlgorithm.BLAKE2S)
old_hash = hasher.hash("TEXT")
new_hash = hasher.hash("TEXT")

if hasher.verify("TEXT", new_hash): # true
   print('Yes!')

if hasher.verify("TEXT2", old_hash): # false
   print('Yes!')

# Output: one "Yes!"

SaltedHasher

Class for hashing with salt:

from pyechonext.security.hashing import HashAlgorithm, SaltedHasher

hasher = SaltedHasher(HashAlgorithm.BLAKE2S, salt='bob')
old_hash = hasher.hash("TEXT")
new_hash = hasher.hash("TEXT")

if hasher.verify("TEXT", new_hash): # true
   print('Yes!')

if hasher.verify("TEXT2", old_hash): # false
   print('Yes!')

# Output: one "Yes!"

pyechonext.security.crypts

Module with various things for encryption and cryptography:

PSPCAlgorithm

Point Simple Password Crypt Algorithm - Point Simple Password Encryption Algorithm (TPASP).

Base: AngryPassword
Crypted: 00778.87999.74379.363401.558001.558001.96058.06107.711601.87999.13309.07469.50075
Decrypted: AngryPassword

Base: S0mesd7623tds@&6^@_
Crypted: 51338.82165.83428.85374.62333.82165.558001.00778.237101.72744.05834.85374.53284.00778.558001.77588.39559.69024.19727
Decrypted: S0mesd7623tds@&6^@_

Base: PassWord
Crypted: 00778.87999.74379.99267.558001.558001.96058.06107
Decrypted: PassWord

Base: Pass
Crypted: 558001.558001.96058.06107
Decrypted: Pass

Example:

from pyechonext.security.crypts import PSPCAlgorithm


pspc = PSPCAlgorithm()

passwords = ['AngryPassword', 'S0mesd7623tds@&6^@_', 'PassWord', 'Pass']

for password in passwords:
   print('Base:', password)
   print('Crypted:', pspc.crypt(password))
   print('Decrypted:', pspc.decrypt(pspc.crypt(password)))
   print()