Crypter & Cryptography
Luminova Crypter class is straightforward means to implement encryption and decryption functionalities in anywhere in your applications. This helper class seamlessly integrates both Sodium and OpenSSL encryption libraries, providing a unified and simplified interface for encrypting and decrypting data without the need for manual initialization of handlers.
- Class namespace:
\Luminova\Security\Crypter - Encryption class interface: \Luminova\Interface\EncryptionInterface
Methods
Supported AES encryption methods with their corresponding key sizes.
public static array $ciphers = []Each cipher entry specifies the size of the encryption key in bytes.
AES-128-CBC- 128-bit key (16 bytes)AES-192-CBC- 192-bit key (24 bytes)AES-256-CBC- 256-bit key (32 bytes)AES-128-CBC-HMAC-SHA1- 128-bit key (16 bytes)AES-256-CBC-HMAC-SHA1- 256-bit key (32 bytes)AES-128-CBC-HMAC-SHA256- 128-bit key (16 bytes)AES-256-CBC-HMAC-SHA256- 256-bit key (32 bytes)AES-128-CFB- 128-bit key (16 bytes)AES-192-CFB- 192-bit key (24 bytes)AES-256-CFB- 256-bit key (32 bytes)AES-128-CFB1- 128-bit key (16 bytes)AES-192-CFB1- 192-bit key (24 bytes)AES-256-CFB1- 256-bit key (32 bytes)AES-128-CFB8- 128-bit key (16 bytes)AES-192-CFB8- 192-bit key (24 bytes)AES-256-CFB8- 256-bit key (32 bytes)AES-128-CTR- 128-bit key (16 bytes)AES-192-CTR- 192-bit key (24 bytes)AES-256-CTR- 256-bit key (32 bytes)AES-128-ECB- 128-bit key (16 bytes)AES-192-ECB- 192-bit key (24 bytes)AES-256-ECB- 256-bit key (32 bytes)AES-128-OFB- 128-bit key (16 bytes)AES-192-OFB- 192-bit key (24 bytes)AES-256-OFB- 256-bit key (32 bytes)AES-128-XTS- 128-bit key (16 bytes)AES-256-XTS- 256-bit key (32 bytes)
getInstance
Get an instance of OpenSSL or Sodium encryption depending on your configurations in encryption .class located in your controller configuration directory in /app/Config/Encryption.php.
public static getInstance(): \Luminova\Interface\EncryptionInterfaceReturn Value:
EncryptionInterface - An instance of the encryption class.
Throws:
- \Luminova\Exceptions\EncryptionException - Throws when an empty encryption key is passed.
- \Luminova\Exceptions\EncryptionException - Throws when an invalid handler is specified or handler extension is not loaded.
encrypt
Encrypt the given data using OpenSSL or Sodium encryption.
public static encrypt(string $data): string|boolParameters:
| Parameter | Type | Description |
|---|---|---|
$data | string | The data to encrypt. |
Return Value:
string|bool - Return the encrypted data, or false if encryption fails.
Throws:
- \Luminova\Exceptions\EncryptionException - Throws when invalid encryption data is passed.
Encryption Example
<?php
$encrypted = Crypter::encrypt('Hello world');decrypt
Decrypt the given data using OpenSSL or Sodium encryption.
public static decrypt(string $data): string|nullParameters:
| Parameter | Type | Description |
|---|---|---|
$data | string | The data to decrypt. |
Return Value:
string|null - Return the decrypted data, or null if decryption fails.
Throws:
- \Luminova\Exceptions\EncryptionException - Throws when invalid encryption data is passed.
Decryption Example
<?php
echo Crypter::decrypt($encrypted);password
Generate a hash representation of user login password string.
public static password(string $password, ?array $options = null): string|falseParameters:
| Parameter | Type | Description |
|---|---|---|
$password | string | The actual password to hash. |
$options | array|null | Optional password hash options. |
Return Value:
string|false - Return hashed password otherwise false on empty password.
Default Options:
[
'cost' => 12,
'salt' => 'custom_salt', // You can optionally specify a custom salt
'algorithm' => PASSWORD_BCRYPT, // Optionally specify the algorithm
];Hashing Password Example
<?php
$hash = Crypter::password('12345@123');verify
Verify user password against it stored hash value to determine if if they match.
public static verify(string $password, string $hash): boolParameters:
| Parameter | Type | Description |
|---|---|---|
$password | string | The password string to verify. |
$hash | string | The password stored hash value. |
Return Value:
bool - Return true if password matches with the hash, otherwise false.
Verifying Password Hash Value Example
<?php
$ok = Crypter::password('12345@123', $hash);supported
Determine if the given key and cipher method are valid.
public static supported(string $key, string $method): boolParameters:
| Parameter | Type | Description |
|---|---|---|
$key | string | The encryption key. |
$method | string | The encryption cipher method. |
Return Value:
bool - Return true if encryption method and key are valid false otherwise.
generate_key
Generates a random encryption key or a pair of private and public keys using the default encryption handler.For RSA key generation, OpenSSL is utilized.
public static generate_key(string $type = 'random', array $options = []): string|array|falseParameters:
| Parameter | Type | Description |
|---|---|---|
$type | string | The type of key to generate: (e.g, 'random', 'private', or 'public'). |
$options | array | Associative array of options for key generation. |
Return Value:
string|array|false - Returns the generated key(s), an array containing private and public keys, or false on failure.
Options Keys:
For
randomtype:length: Specifies the length of the random string to generate.
For
privatetype:private_key_bits: (default: 2048) Specifies the number of bits in the private key.private_key_type: (default:OPENSSL_KEYTYPE_RSA) Specifies the type of the private key (e.g.,OPENSSL_KEYTYPE_RSA).
For
publictype:private_key: Specifies the private key string from which to derive the public key. If not provided, a new private key will be generated.
Example Usage:
Generate a random key:
$key = Crypter::generate_key('random', ['length' => 32]);Generate a private key:
$privateKey = Crypter::generate_key('private', [
'private_key_bits' => 2048,
'private_key_type' => OPENSSL_KEYTYPE_RSA
]);Generate a public key:
$keys = Crypter::generate_key('public', ['private_key' => $privateKey]);Configuration
These Configuration properties allows you to configure encryption settings for your application. The location of the configuration class is /app/Config/Encryption.php
$handler
- Description: Specify encryption handler class to use (
opensslorsodium). - Type:
string - Default Value: 'openssl'
$method
- Description: The encryption mode for openssl (e.g., 'AES-128-CBC', 'AES-192-CBC', 'AES-128-CFB', 'AES-128-ECB').
- Type:
string - Default Value: 'AES-128-CBC'
$digest
- Description: Specify hashing digest to use (e.g., SHA512, SHA256).
- Type:
string - Default Value: 'SHA512'
$keyInfo
- Description: Openssl key information.
- Type:
string - Default Value:
blank string