PHP code example of maymeow / cryptography

1. Go to this page and download the library: Download maymeow/cryptography 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/ */

    

maymeow / cryptography example snippets


// Option 1: Use RSA for AES hybrid encryption (current limitation)
$rsaParams = new RSAParameters();
$rsaConfig = [
    'private_key_type' => OPENSSL_KEYTYPE_RSA,
    'private_key_bits' => 2048
];
$rsaParams->generateKeys($passphrase, $rsaConfig);
$aes = new AESCryptoServiceProvider();
$sealed = $aes->seal($plaintext, $rsaParams);

// Option 2: Explicit RSA for direct encryption 
$rsa = new RSACryptoServiceProvider();
$rsa->setParameters($rsaParams);
$encrypted = $rsa->encrypt($plaintext);

// Dedicated EC classes for explicit EC usage
$ecParams = new ECParameters();
$ecCrypto = new ECCryptoServiceProvider();

$csp = new AESCryptoServiceProvider();
$csp->generateIV();
$key = $csp->generateKey();

$plainText = "This is going to be encrypted!";
$encryptedText= $csp->encrypt($plainText);

$csp2 = new AESCryptoServiceProvider();
$csp2->setKey($key);
$decryptedText = $csp2->decrypt($encryptedText);

$plainText = "This is going to be signed!";
$parameters = new RSAParameters();
$parameters->generateKeys("passphrase"); // Now generates EC keys by default

$crypto = new RSACryptoServiceProvider();
$crypto->setParameters($parameters);

// Signing and verification work with both RSA and EC keys
$signature = $crypto->sign($plainText, "passphrase", "salt");
$isValid = $crypto->verify($plainText, $signature); // true

$plainText = "This is going to be encrypted!";
$parameters = new RSAParameters();

// Explicitly configure RSA for encryption
$rsaConfig = [
    'private_key_type' => OPENSSL_KEYTYPE_RSA,
    'private_key_bits' => 2048
];
$parameters->generateKeys("passphrase", $rsaConfig, "salt");

$rsa = new RSACryptoServiceProvider();
$rsa->setParameters($parameters);

$encryptedText = $rsa->encrypt($plainText);
$decryptedText = $rsa->decrypt($encryptedText, "passphrase", "salt");

// Current: Use RSA for hybrid encryption
$rsaParams = new RSAParameters();
$rsaConfig = ['private_key_type' => OPENSSL_KEYTYPE_RSA, 'private_key_bits' => 2048];
$rsaParams->generateKeys("passphrase", $rsaConfig, "salt");

$aes = new AESCryptoServiceProvider();
$sealed = $aes->seal($plainText, $rsaParams, humanReadableData: true);
$opened = $aes->open($sealed[1], $sealed[0], $rsaParams, "passphrase", "salt");

$ecParams = new ECParameters();
$ecParams->generateKeys("passphrase"); // Always EC

$ec = new ECCryptoServiceProvider();
$ec->setParameters($ecParams);

// Only signing/verification available (no direct encryption)
$signature = $ec->sign($data, "passphrase", "salt");
$isValid = $ec->verify($data, $signature);

$parameters = new RSAParameters();
$parameters->generateKeys("passphrase", null, "salt"); // Uses EC by default
$locator = new TestingParametersLocator();

$writer = new RsaParametersWriter($locator);
$writer->write($parameters, privateKeyPass: "passphrase", salt: "salt");

$reader = new RsaParametersReader($locator);
$parameters2 = $reader->read();

$csp2 = new RSACryptoServiceProvider();
$csp2->setParameters($parameters2);

$p = new Maymeow\Cryptography\CryptoKey();

$p->getCryptograhicKey($password, $salt);