Laravel Crypto provides several utility classes for common cryptographic tasks, such as encoding and random number generation.
Encoders are used by the encryption system to prepare data before it is encrypted and to restore it after decryption.
| Encoder | Description | Requirement |
|---|---|---|
PhpEncoder |
Uses PHP's serialize() and unserialize(). |
None |
JsonEncoder |
Uses json_encode() and json_decode(). |
ext-json |
MessagePackEncoder |
Uses MessagePack format. | ext-msgpack |
IgbinaryEncoder |
Uses Igbinary format. | ext-igbinary |
You can set the default encoder in config/crypto.php:
'encoder' => [
'driver' => CodeLieutenant\LaravelCrypto\Encoder\PhpEncoder::class,
'config' => [
CodeLieutenant\LaravelCrypto\Encoder\PhpEncoder::class => [
'allowed_classes' => true,
],
CodeLieutenant\LaravelCrypto\Encoder\JsonEncoder::class => [
'decode_as_array' => true,
]
],
],The CodeLieutenant\LaravelCrypto\Support\Base64 class provides constant-time Base64 encoding and decoding using libsodium.
Constant-time methods are safer as they help prevent timing attacks.
use CodeLieutenant\LaravelCrypto\Support\Base64;
$encoded = Base64::constantUrlEncodeNoPadding($binaryData);
$decoded = Base64::constantUrlDecodeNoPadding($encoded);Available constant-time variants:
constantEncode/constantDecodeconstantEncodeNoPaddingconstantUrlEncode/constantUrlDecodeconstantUrlEncodeNoPadding/constantUrlDecodeNoPadding
The CodeLieutenant\LaravelCrypto\Support\Random class provides cryptographically secure random values.
use CodeLieutenant\LaravelCrypto\Support\Random;
// Generate random bytes
$bytes = Random::bytes(32);
// Generate a random URL-safe string
$string = Random::string(16);
// Generate a random integer
$int = Random::int(1, 100);