PHP code example of monkeyscloud / monkeyslegion-encryption
1. Go to this page and download the library: Download monkeyscloud/monkeyslegion-encryption library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
monkeyscloud / monkeyslegion-encryption example snippets
use MonkeysLegion\Encryption\Encrypter;
use MonkeysLegion\Encryption\Key\Key;
$key = Key::generate();
$encrypter = new Encrypter($key);
$encrypted = $encrypter->encryptString('sensitive data');
$decrypted = $encrypter->decryptString($encrypted); // "sensitive data"
use MonkeysLegion\Encryption\Key\{Key, KeyChain};
use MonkeysLegion\Encryption\Encrypter;
$currentKey = Key::fromBase64($newKeyString);
$oldKey = Key::fromBase64($previousKeyString);
$keyChain = KeyChain::withRotation($currentKey, [$oldKey]);
$encrypter = new Encrypter($keyChain);
// New data encrypted with current key
$encrypted = $encrypter->encryptString('new data');
// Old data decrypted by trying all keys (current → previous)
$decrypted = $encrypter->decryptString($oldEncryptedPayload);
// Property hooks
$encrypter->usingRotation; // true
$keyChain->hasPreviousKeys; // true
$keyChain->keyCount; // 2
use MonkeysLegion\Encryption\EnvelopeEncrypter;
$envelope = new EnvelopeEncrypter($masterKey);
// Encrypt — generates random DEK per record
$result = $envelope->encrypt('patient medical records');
// ['encrypted_data' => '...', 'wrapped_key' => '...', 'cipher' => 'aes-256-gcm']
// Decrypt — unwraps DEK then decrypts data
$data = $envelope->decrypt($result);
// Re-wrap with new master key (zero-downtime rotation)
$newResult = $envelope->rewrap($result, $newMasterKey);
use MonkeysLegion\Encryption\DeterministicEncrypter;
$det = new DeterministicEncrypter($key);
// Same input → same output (for indexed DB columns)
$a = $det->encrypt('[email protected]');
$b = $det->encrypt('[email protected]');
assert($a === $b); // true — searchable!
$email = $det->decrypt($a); // "[email protected]"
use MonkeysLegion\Encryption\Hmac\HmacSigner;
use MonkeysLegion\Encryption\Enum\HmacAlgorithm;
$signer = new HmacSigner($secretKey);
// Sign
$mac = $signer->sign('webhook payload');
// Verify (constant-time comparison)
$valid = $signer->verify('webhook payload', $mac); // true
// Different algorithms
$mac512 = $signer->sign('data', null, HmacAlgorithm::Sha512);
// Structured result
$result = $signer->signResult('data');
echo $result->mac;
echo $result->length;
$result->verify($incomingMac);
use MonkeysLegion\Encryption\Hash\Hasher;
use MonkeysLegion\Encryption\Enum\HashAlgorithm;
// Default: Argon2id
$hasher = new Hasher();
$hash = $hasher->hash('my-password');
$valid = $hasher->verify('my-password', $hash); // true
// Check if needs upgrade
if ($hasher->needsRehash($hash)) {
$newHash = $hasher->hash('my-password');
}
// Hash info
$info = $hasher->info($hash);
$info->isArgon2; // true (property hook)
$info->isBcrypt; // false (property hook)
// Bcrypt with custom rounds
$bcrypt = new Hasher(HashAlgorithm::Bcrypt, ['rounds' => 14]);
// Argon2id with custom options
$argon = new Hasher(HashAlgorithm::Argon2id, [
'memory' => 131072,
'time' => 6,
'threads' => 4,
]);
use MonkeysLegion\Encryption\Key\{Key, KeyDerivation};
$kdf = new KeyDerivation(salt: random_bytes(16));
$masterKey = Key::generate();
// Derive sub-keys with context labels
$encKey = $kdf->deriveKey($masterKey, 'encryption-v1');
$authKey = $kdf->deriveKey($masterKey, 'authentication-v1');
// Use derived keys
$encrypter = new Encrypter($encKey->toKey());
// Raw derivation
$raw = $kdf->derive($masterKey->material(), 'session-key', 32);