originphp / security
OriginPHP Security
Installs: 11 254
Dependents: 5
Suggesters: 0
Security: 0
Stars: 1
Watchers: 2
Forks: 0
Open Issues: 0
Requires
- php: >=7.3.0
Requires (Dev)
- phpstan/phpstan: ^0.12.64
- phpunit/phpunit: ^9.2
README
The Security
library provides various function related to security such as hashing, encryption, decryption and secure random string generation.
Installation
To install this package
$ composer require originphp/security
Hashing
Hashing Strings (Not Passwords)
The default hashing algorithm used is sha256
.
To hash a string (not password)
use Origin\Security\Security; $hashed = Security::hash('foo');
To hash a string with a pepper (also incorrectly known as salt).
$hashed = Security::hash('foo',['pepper'=>'A random string']);
To change the hashing type
$hashed = Security::hash('foo',['type'=>'sha1']);
For a full list of supported algorithms
$list = hash_algos()
Hashing Passwords
The Security utility hashes passwords using best practices, currently this is bcrypt
which is considered
very secure.
$hashed = Security::hashPassword('secret');
To verify the password is correct
$hashed = Security::hashPassword('secret'); $bool = Security::verifyPassword($input,$hashed); // input is user inputted password
Encryption
Generating a Secure Key
To encrypt and decrypt a string you will need a key, you can generate a random secure key.
use Origin\Security\Security; $key = Security::generateKey(); // ESaCestIJvuAo3NUAtHAZG9DqmFJZtyx
The key length must be 32 bytes (256 bits) to use with the encryption decryption functions.
Encrypting Text
To encrypt a string
use Origin\Security\Security; $key = '33d80476167cc95c363bf7df3c95e1d1'; $encrypted = Security::encrypt('foo',$key);
Decrypting Text
To decrypt an encrypted string
use Origin\Security\Security; $key = '33d80476167cc95c363bf7df3c95e1d1'; $encrypted = 'ohRRdAydx+4wfOd7Vm+LHmmV9zBH+3r0WLQylyPMPu2RvCjX9FVgoeUBZuLYBTLM4x9NeZX7U0bUvE1bucATSQ=='; $plain = Security::decrypt($encrypted,$key);
Random Strings
To generate a cryptographically secure hexadecimal random string, the default length is 16. (This is an alias for hex)
$randomString = Security::random(); // 5f31ecf661dabb04
Different Encodings
You can generate secure random strings with different encoding.
$hex = Security::hex(); // gpgf67ezotl06wqs $base36 = Security::base36(); // 13owqvwcgb426rvq $base58 = Security::base58(); // SyqBFAtGfNxZkZMQ $base62 = Security::base62(); // oc1eIfAHKWWt5zrO $base64 = Security::base64(); // v3xsI6O+g6LsuY4+ // url safe $base64 = Security::base64(16,true); // YPT9rp-i6jqXWCvA
UID
If you need to generate a unique id, and don't need to use a UUID, then the UID method provides a more memory and disk space efficient way when working with unique ids.
If you are generating a API token or another form of string that a user might need to type in, then use
Security::random
orSecurity::uuid
instead since these use lower case characters.
To generate a cryptographically secure unique id (UID) using base62 with a default length of 16.
$uid = Security::uid(); // O64cjBxfz2JPhyCQ
UUID
The Security class can generate both version 4 and version 1 UUIDs.
To generate a random UUID (version 4)
$uid = Security::uuid(); // 38c67382-d3ab-4430-a27e-0c719813c09f
For a version 1 UUID, set MAC address to true, this will try to find the MAC address on Linux systems or generate a random one.
$uid = Security::uuid(['macAddress'=>true]); // ac337932-e4e5-11e9-928f-8bda39fe8887
You can also set the MAC address manually.
$uid = Security::uuid(['macAddress'=>'00:0a:95:9d:68:16']); // 769c6fa4-e4e5-11e9-b8d5-000a959d6816