Heim  >  Artikel  >  php教程  >  PHP aes算法

PHP aes算法

PHP中文网
PHP中文网Original
2016-05-25 17:05:47972Durchsuche

php代码

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";
?>
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn