<?php
function getKeyFromPassword($password, $salt) {
return hash_pbkdf2('sha256', $password, $salt, 65536, 32, true);
}
function encryptPasswordBased($plainText, $key, $iv) {
$cipherText = openssl_encrypt($plainText, 'aes-256-cbc', $key, OPENSSL_RAW_DATA, $iv);
return base64_encode($cipherText);
}
function decryptPasswordBased($encryptedText, $key, $iv) {
$cipherText = base64_decode($encryptedText);
$plainText = openssl_decrypt($cipherText, 'aes-256-cbc', $key, OPENSSL_RAW_DATA, $iv);
return $plainText;
}
function encrypt($stringToEncrypt, $password, $salt) {
$base64Encoded = base64_encode($stringToEncrypt);
echo "Base64 Encoded: $base64Encoded\n";
$iv = str_repeat("\0", 16);
$key = getKeyFromPassword($password, $salt);
echo "Derived Key: " . bin2hex($key) . "\n";
$encrypted = encryptPasswordBased($base64Encoded, $key, $iv);
echo "Encrypted: $encrypted\n";
return $encrypted;
}
function decrypt($encryptedText, $password, $salt) {
$iv = str_repeat("\0", 16);
$key = getKeyFromPassword($password, $salt);
echo "Derived Key: " . bin2hex($key) . "\n";
$decryptedBase64 = decryptPasswordBased($encryptedText, $key, $iv);
echo "Decrypted Base64: $decryptedBase64\n";
$decrypted = base64_decode($decryptedBase64);
echo "Decrypted: $decrypted\n";
return $decrypted;
}
$password = 'your encryption key';
$salt = 'your aoi key';
$plainText = 'things to test';
try {
$encrypted = encrypt($plainText, $password, $salt);
echo "Encrypted: $encrypted\n";
$decrypted = decrypt($encrypted, $password, $salt);
echo "Decrypted: $decrypted\n";
} catch (Exception $ex) {
echo 'Error: ' . $ex->getMessage() . "\n";
}
?>