123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- <?php
- class AES{
- /**
- * This was AES-128 / CBC / PKCS5Padding
- * return base64_encode string
- * @author Terry
- * @param string $plaintext
- * @param string $key
- * @return string
- */
- public static function AesEncrypt($plaintext,$key = null)
- {
- $plaintext = trim($plaintext);
- if ($plaintext == '') return '';
- $size = mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
- //PKCS5Padding
- $padding = $size - strlen($plaintext) % $size;
- // 添加Padding
- $plaintext .= str_repeat(chr($padding), $padding);
- $module = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, '');
- $key=self::substr($key, 0, mcrypt_enc_get_key_size($module));
- $iv = str_repeat("\0", $size); //java里面的16个空数组对应的是\0.
- /* Intialize encryption */
- mcrypt_generic_init($module, $key, $iv);
- /* Encrypt data */
- $encrypted = mcrypt_generic($module, $plaintext);
- /* Terminate encryption handler */
- mcrypt_generic_deinit($module);
- mcrypt_module_close($module);
- return base64_encode($encrypted);
- }
- /**
- * Returns the length of the given string.
- * If available uses the multibyte string function mb_strlen.
- * @param string $string the string being measured for length
- * @return integer the length of the string
- */
- private static function strlen($string)
- {
- return extension_loaded('mbstring') ? mb_strlen($string,'8bit') : strlen($string);
- }
- /**
- * Returns the portion of string specified by the start and length parameters.
- * If available uses the multibyte string function mb_substr
- * @param string $string the input string. Must be one character or longer.
- * @param integer $start the starting position
- * @param integer $length the desired portion length
- * @return string the extracted part of string, or FALSE on failure or an empty string.
- */
- private static function substr($string,$start,$length)
- {
- return extension_loaded('mbstring') ? mb_substr($string,$start,$length,'8bit') : substr($string,$start,$length);
- }
- /**
- * This was AES-128 / CBC / PKCS5Padding
- * @author Terry
- * @param string $encrypted base64_encode encrypted string
- * @param string $key
- * @throws CException
- * @return string
- */
- public static function AesDecrypt($encrypted, $key = null)
- {
- if ($encrypted == '') return '';
- $ciphertext_dec = base64_decode($encrypted);
- $module = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, '');
- $key=self::substr($key, 0, mcrypt_enc_get_key_size($module));
-
- $iv = str_repeat("\0", 16); //解密的初始化向量要和加密时一样。
- /* Initialize encryption module for decryption */
- mcrypt_generic_init($module, $key, $iv);
- /* Decrypt encrypted string */
- $decrypted = mdecrypt_generic($module, $ciphertext_dec);
- /* Terminate decryption handle and close module */
- mcrypt_generic_deinit($module);
- mcrypt_module_close($module);
- $a = rtrim($decrypted,"\0");
- return rtrim($decrypted,"\0");
- }
- }
- //echo AES::AesEncrypt("haha","mkeymkeymkeymkey");
- ?>
|