PHP aes算法
PHP aes算法
PHP aes算法
function aes128cbcEncrypt($key, $text)
{
/**
* Open the cipher
*/
$td = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, '');
if (! $td)
{
throw new GeneralSecurityException('Invalid mcrypt cipher, check your libmcrypt library and php-mcrypt extention');
}
// replaced MCRYPT_DEV_RANDOM with MCRYPT_RAND since windows doesn't have /dev/rand :)
srand((double)microtime() * 1000000);
$iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
/**
* Intialize encryption
*/
mcrypt_generic_init($td, $key, $iv);
/**
* Encrypt data
*/
$encrypted = mcrypt_generic($td, $text);
/**
* Terminate encryption handler
*/
mcrypt_generic_deinit($td);
/**
* AES-128-CBC encryption. The IV is returned as the first 16 bytes
* of the cipher text.
*/
return $iv . $encrypted;
}
function aes128cbcDecrypt($key, $encrypted_text)
{
/**
* Open the cipher
*/
$td = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, '');
if (is_callable('mb_substr'))
{
$iv = mb_substr($encrypted_text, 0, Crypto_CIPHER_BLOCK_SIZE, 'latin1');
}
else
{
$iv = substr($encrypted_text, 0, Crypto_CIPHER_BLOCK_SIZE);
}
/**
* Initialize encryption module for decryption
*/
mcrypt_generic_init($td, $key, $iv);
/**
* Decrypt encrypted string
*/
if (is_callable('mb_substr'))
{
$encrypted = mb_substr($encrypted_text, Crypto_CIPHER_BLOCK_SIZE, mb_strlen($encrypted_text, 'latin1'), 'latin1');
}
else
{
$encrypted = substr($encrypted_text, Crypto_CIPHER_BLOCK_SIZE);
}
$decrypted = mdecrypt_generic($td, $encrypted);
/**
* Terminate decryption handle and close module
*/
mcrypt_generic_deinit($td);
mcrypt_module_close($td);
/**
* Show string
*/
return trim($decrypted);
}
define('Crypto_CIPHER_BLOCK_SIZE', 16);
$a = aes128cbcEncrypt('pass', 'this is text');
echo base64_encode($a) . "/r/n";
$b = aes128cbcDecrypt('pass', $a);
echo $b . "/r/n";
$c = aes128cbcDecrypt('pass', base64_decode(base64_encode($a)));
echo $c . "/r/n";
?>
- 上一篇:PHP实现数字格式化,每三位加逗号
- 下一篇:php后门程序演示
精彩图集
精彩文章






