<?php
$key = '032848'; // This key should be used when reversing the encrypted data.
$foo = 'foo'; // Data to be encrypted.
// Function that will encrypt the data
// This will return a base64 encoded string.
function mc_encrypt($encrypt, $key){
$cipher = mcrypt_module_open(MCRYPT_BLOWFISH, '', MCRYPT_MODE_CBC, ''; // Using BLOWFISH and CBC - Initializing
$iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_BLOWFISH, MCRYPT_MODE_CBC), MCRYPT_RAND); // Generating a IV
$key = pack('H*', $key); // Packing the key
if (mcrypt_generic_init($cipher, $key, $iv) != -1)
{
$encrypt = serialize($encrypt); // We serialize the data being passed.
$cipherText = mcrypt_generic($cipher, $encrypt); // Encypted
mcrypt_generic_deinit($cipher); // De-initializing
return base64_encode(bin2hex($cipherText) . "\n" . bin2hex($iv) . "\n" . md5($cipherText . $iv)); // Base64 Encoding
}
return ''; // If it didn't encrypt then return a blank string.
}
// Displaying key, data (original), and encrypted data.
echo "Key: {$key} <br />";
echo "Data: {$foo}<br />";
echo "Encrypted: <br />" . mc_encrypt($foo, $key);
function mc_decrypt($decrypt, $key)
{
$step1 = explode("\n", base64_decode($decrypt));
$cipherText = hex2bin($step1[0]);
$iv = hex2bin($step1[1]);
$modified = (md5($cipherText . $iv) != $step1[2]);
if ($modified) {
return '';
}
if (strlen($iv) !== mcrypt_get_iv_size(MCRYPT_BLOWFISH, MCRYPT_MODE_CBC))
return '';
$key = pack('H*', $key);
$decoded = mcrypt_decrypt(MCRYPT_BLOWFISH, $key, $cipherText, MCRYPT_MODE_CBC, $iv);
if (serializedContainsObject($decoded))
return '';
return unserialize($decoded);
}
function serializedContainsObject($serialized)
{
if (strpos($serialized, 'O:' !== false && preg_match('#(?<=^|[;{}])O:[+-]?[0-9]+:"#', $serialized))
{
return true;
}
if (strpos($serialized, 'C:' !== false && preg_match('#(?<=^|[;{}])C:[+-]?[0-9]+:"#', $serialized))
{
return true;
}
if (strpos($serialized, 'o:' !== false && preg_match('#(?<=^|[;{}])o:[+-]?[0-9]+:"#', $serialized))
{
return true;
}
return false;
}
<?php
$key = '032848'; // This key should be used when reversing the encrypted data.
$foo = 'foo'; // Data to be encrypted.
// Function that will encrypt the data
// This will return a base64 encoded string.
function mc_encrypt($encrypt, $key){
$cipher = mcrypt_module_open(MCRYPT_BLOWFISH, '', MCRYPT_MODE_CBC, ''; // Using BLOWFISH and CBC - Initializing
$iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_BLOWFISH, MCRYPT_MODE_CBC), MCRYPT_RAND); // Generating a IV
$key = pack('H*', $key); // Packing the key
if (mcrypt_generic_init($cipher, $key, $iv) != -1)
{
$encrypt = serialize($encrypt); // We serialize the data being passed.
$cipherText = mcrypt_generic($cipher, $encrypt); // Encypted
mcrypt_generic_deinit($cipher); // De-initializing
return base64_encode(bin2hex($cipherText) . "\n" . bin2hex($iv) . "\n" . md5($cipherText . $iv)); // Base64 Encoding
}
return ''; // If it didn't encrypt then return a blank string.
}
// Displaying key, data (original), and encrypted data.
echo "Key: {$key} <br />";
echo "Data: {$foo}<br />";
echo "Encrypted: <br />" . mc_encrypt($foo, $key);
function mc_decrypt($decrypt, $key)
{
$step1 = explode("\n", base64_decode($decrypt));
$cipherText = hex2bin($step1[0]);
$iv = hex2bin($step1[1]);
$modified = (md5($cipherText . $iv) != $step1[2]);
if ($modified) {
return '';
}
if (strlen($iv) !== mcrypt_get_iv_size(MCRYPT_BLOWFISH, MCRYPT_MODE_CBC))
return '';
$key = pack('H*', $key);
$decoded = mcrypt_decrypt(MCRYPT_BLOWFISH, $key, $cipherText, MCRYPT_MODE_CBC, $iv);
if (serializedContainsObject($decoded))
return '';
return unserialize($decoded);
}
function serializedContainsObject($serialized)
{
if (strpos($serialized, 'O:' !== false && preg_match('#(?<=^|[;{}])O:[+-]?[0-9]+:"#', $serialized))
{
return true;
}
if (strpos($serialized, 'C:' !== false && preg_match('#(?<=^|[;{}])C:[+-]?[0-9]+:"#', $serialized))
{
return true;
}
if (strpos($serialized, 'o:' !== false && preg_match('#(?<=^|[;{}])o:[+-]?[0-9]+:"#', $serialized))
{
return true;
}
return false;
}
Copyright © 2024, NextGenUpdate.
All Rights Reserved.