protected function decrypt($data, $key)
    {
        $hmac       = mb_substr($data, 0, 32, '8bit');
        $iv         = mb_substr($data, 32, 16, '8bit');
        $ciphertext = mb_substr($data, 48, null, '8bit');
        // Authentication
        $hmacNew = hash_hmac(
            'SHA256',
            $iv . $ciphertext,
            mb_substr($key, 32, null, '8bit'),
            true
        );
        if (! hash_equals($hmac, $hmacNew)) {
            throw new Exception\AuthenticationFailedException('Authentication failed');
        }
        // Decrypt
        return openssl_decrypt(
            $ciphertext,
            'AES-256-CBC',
            mb_substr($key, 0, 32, '8bit'),
            OPENSSL_RAW_DATA,
            $iv
        );
    }
protected function decrypt($data, $key)
    {
        $hmac       = mb_substr($data, 0, 32, '8bit');
        $iv         = mb_substr($data, 32, 16, '8bit');
        $ciphertext = mb_substr($data, 48, null, '8bit');
        // Authentication
        $hmacNew = hash_hmac(
            'SHA256',
            $iv . $ciphertext,
            mb_substr($key, 32, null, '8bit'),
            true
        );
        if (! hash_equals($hmac, $hmacNew)) {
            throw new Exception\AuthenticationFailedException('Authentication failed');
        }
        // Decrypt
        return openssl_decrypt(
            $ciphertext,
            'AES-256-CBC',
            mb_substr($key, 0, 32, '8bit'),
            OPENSSL_RAW_DATA,
            $iv
        );
    }
protected function decrypt ( $ data , $ key ) { $ hmac = mb_substr ( $ data , 0 , 32 , '8bit' ) ; $ iv = mb_substr ( $ data , 32 , 16 , '8bit' ) ; $ ciphertext = mb_substr ( $ data , 48 , null , '8bit' ) ; // Authentication $ hmacNew = hash_hmac ( 'SHA256' , $ iv . $ ciphertext , mb_substr ( $ key , 32 , null , '8bit' ) , true ) ; if ( ! hash_equals ( $ hmac , $ hmacNew ) ) { throw new Exception \ AuthenticationFailedException ( 'Authentication failed' ) ; } // Decrypt return openssl_decrypt ( $ ciphertext , 'AES-256-CBC' , mb_substr ( $ key , 0 , 32 , '8bit' ) , OPENSSL_RAW_DATA , $ iv ) ; }
Authenticate and decrypt

@param string $data
@param string $key
@return string
Authenticate and decrypt