'; $str = static:: addPKCS7Padding($str); $iv = @ mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC), 1); $encrypt_str = @mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $screct_key, $str, MCRYPT_MODE_CBC, $IVS); return base64_encode($encrypt_str); } public static function getSercrtCode($key) { $key = static::sha256hashBase64($key); // $ivSize = @mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB); // $iv = @mcrypt_create_iv($ivSize, MCRYPT_RAND); $key2 = substr(openssl_digest(openssl_digest($key, 'sha1', true), 'sha1', true), 0, 16); return base64_encode($key2); } /** * 填充算法 * @param string $source * @return string */ public static function addPKCS7Padding($source) { $source = trim($source); $block = @mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC); $pad = $block - (strlen($source) % $block); if ($pad <= $block) { $char = chr($pad); $source .= str_repeat($char, $pad); } return $source; } /** * 移去填充算法 * @param string $source * @return string */ public static function stripPKSC7Padding($source) { $source = trim($source); $char = substr($source, -1); $num = ord($char); if ($num == 62) return $source; $source = substr($source, 0, -$num); return $source; } public static function sha256hashBase64($data, $hashIterations = 1024) { $str = $data; for ($x = 0; $x < $hashIterations; $x++) { $tar = hash("sha256", $str); $str = static::str2bin($tar); } return base64_encode($str); } public static function str2bin($hexdata) { $bindata = ""; for ($i = 0; $i < strlen($hexdata); $i += 2) { $bindata .= chr(hexdec(substr($hexdata, $i, 2))); } return $bindata; } public static function decrypt($str, $screct_key, $IVS = array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)) { //AES, 128 模式加密数据 CBC $str = base64_decode($str); $IVS = implode(array_map("chr", $IVS)); $screct_key = static::getSercrtCode($screct_key); $screct_key = base64_decode($screct_key); $iv = @mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC), 1); // $encrypt_str = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $screct_key, $str, MCRYPT_MODE_CBC,$IVS ); $encrypt_str = @mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $screct_key, $str, MCRYPT_MODE_CBC, $IVS); $encrypt_str = trim($encrypt_str); //$encrypt_str = static::stripPKSC7Padding($encrypt_str); return $encrypt_str; } /** *url 安全的base64编码 sunlonglong */ function base64url_encode($data) { return rtrim(strtr(base64_encode($data), '+/', '-_'), '='); } /** *url 安全的base64解码 sunlonglong */ function base64url_decode($data) { return base64_decode(str_pad(strtr($data, '-_', '+/'), strlen($data) % 4, '=', STR_PAD_RIGHT)); } }