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";
- ?>
复制代码
|