private function hash($msg, $algo)
    {
        if (extension_loaded('hash')) {
            $algo = strtolower($algo);

            if (in_array($algo, hash_algos())) {
                return hash($algo, $this->salt . $msg);
            }
        }

        if (extension_loaded('mhash')) {
            $algo = strtoupper($algo);

            if (defined('MHASH_' . $algo)) {
                return mhash('MHASH_' . $algo, $this->salt . $msg);
            }
        }

        switch (strtolower($algo)) {
            case 'md5':
                return md5($this->salt . $msg);
            case 'crc32':
                return abs(crc32($this->salt . $msg));
        }

        return false;
    }