示例#1
0
 /**
  * @brief Constructor
  *
  * @param String $algo The algorithm
  */
 public function __construct($algo)
 {
     $algo = strtolower($algo);
     // Check for support
     if (extension_loaded('hash')) {
         // We got the hashing support, so let's check if the algorithm is
         // supported.
         if (arr::hasValue(hash_algos(), $algo)) {
             $this->module = self::MOD_HASH;
             $this->algo = $algo;
             return;
         }
     }
     if (extension_loaded('mhash')) {
         // No hash support but mhash support, can it handle the algorithm?
         $num = mhash_count();
         for ($i = 0; $i <= $num; $i++) {
             if (mhash_get_hash_name($i) == $algo) {
                 $this->module = self::MOD_MHASH;
                 $this->algo = $algo;
                 return;
             }
         }
     }
     // Fall back on legacy spport here, is the algorithm one of the
     // by php supported ones?
     if (arr::hasValue(array('md5', 'sha1', 'crc32'), $algo)) {
         $this->module = self::MOD_PHP;
         $this->algo = $algo;
         return;
     }
     // No support, throw exception
     throw new SecurityException("Request for unsupported hash algorithm");
 }
示例#2
0
 /**
  * Since MHASH accepts an integer constant representing the hash algorithm
  * we need to make a small detour to get the correct integer matching our
  * algorithm's name.
  *
  * @param string $hashAlgorithm
  * @return integer
  */
 protected static function _getMhashDefinition($hashAlgorithm)
 {
     for ($i = 0; $i <= mhash_count(); $i++) {
         $types[mhash_get_hash_name($i)] = $i;
     }
     return $types[strtoupper($hashAlgorithm)];
 }
示例#3
0
 function mhash($hashtype, $text, $key)
 {
     #-- hash function
     if (!($func = mhash_get_hash_name($hashtype)) || !function_exists($func)) {
         return trigger_error("mhash: cannot use hash algorithm #{$hashtype}/{$func}", E_USER_ERROR);
     }
     if (!$key) {
         trigger_error("mhash: called without key", E_USER_WARNING);
     }
     #-- params
     $bsize = mhash_get_block_size($hashtype);
     // fixed size, 64
     #-- pad key
     if (strlen($key) > $bsize) {
         // hash key, when it's too long
         $key = $func($key);
         $key = pack("H*", $key);
         // binarify
     }
     $key = str_pad($key, $bsize, "");
     // fill up with NULs (1)
     #-- prepare inner and outer padding stream
     $ipad = str_pad("", $bsize, "6");
     // %36
     $opad = str_pad("", $bsize, "\\");
     // %5C
     #-- call hash func    // php can XOR strings for us
     $dgst = pack("H*", $func(($key ^ $ipad) . $text));
     // (2,3,4)
     $dgst = pack("H*", $func(($key ^ $opad) . $dgst));
     // (5,6,7)
     return $dgst;
 }
示例#4
0
<?php

$supported_hash_al = array("MD5" => 16, "MD4" => 16, "SHA1" => 20, "SHA256" => 32, "HAVAL256" => 32, "HAVAL192" => 24, "HAVAL224" => 28, "HAVAL160" => 20, "HAVAL128" => 16, "RIPEMD160" => 20, "GOST" => 32, "TIGER" => 24, "TIGER160" => 20, "TIGER128" => 16, "CRC32" => 4, "CRC32B" => 4, "ADLER32" => 4, "NA_XYZ" => 0);
$hc = mhash_count() + 1;
$known_hash_al = array();
for ($i = 0; $i < $hc; $i++) {
    $known_hash_al[mhash_get_hash_name($i)] = $i;
}
foreach ($supported_hash_al as $name => $len) {
    if (array_key_exists($name, $known_hash_al)) {
        $len = mhash_get_block_size($known_hash_al[$name]);
        echo "{$name} = {$len}\n";
    } else {
        echo "{$name} ? {$len}\n";
    }
}
示例#5
0
文件: Mhash.php 项目: Artea/freebeer
require_once FREEBEER_BASE . '/lib/Mhash.php';
echo html_header_demo('fbMhash Class (mhash() Emulation)');
$data = 'data';
$key = 'key';
echo "<pre>\n";
echo "mhash(MHASH_MD5, '{$data}', '{$key}')=", mhash(MHASH_MD5, $data, $key), "\n";
echo "bin2hex(mhash(MHASH_MD5, '{$data}', '{$key}'))=   ", bin2hex(mhash(MHASH_MD5, $data, $key)), "\n";
if (class_exists('fbMhash')) {
    echo "fbMhash::mhashhex(MHASH_MD5, '{$data}', '{$key}')=", fbMhash::mhashhex(MHASH_MD5, $data, $key), "\n";
}
if (defined('MHASH_SHA1')) {
    echo "mhash(MHASH_SHA1, '{$data}', '{$key}')=", mhash(MHASH_SHA1, $data, $key), "\n";
    echo "bin2hex(mhash(MHASH_SHA1, '{$data}', '{$key}'))=   ", bin2hex(mhash(MHASH_SHA1, $data, $key)), "\n";
    if (class_exists('fbMhash')) {
        echo "fbMhash::mhashhex(MHASH_SHA1, '{$data}', '{$key}')=", fbMhash::mhashhex(MHASH_SHA1, $data, $key), "\n";
    }
}
$hash_map = array(0 => 'MHASH_CRC32', 9 => 'MHASH_CRC32B', 8 => 'MHASH_GOST', 13 => 'MHASH_HAVAL128', 12 => 'MHASH_HAVAL160', 11 => 'MHASH_HAVAL192', 10 => 'MHASH_HAVAL224', 3 => 'MHASH_HAVAL256', 16 => 'MHASH_MD4', 1 => 'MHASH_MD5', 5 => 'MHASH_RIPEMD160', 2 => 'MHASH_SHA1', 17 => 'MHASH_SHA256', 7 => 'MHASH_TIGER', 14 => 'MHASH_TIGER128', 15 => 'MHASH_TIGER160');
$nr = mhash_count();
for ($i = 0; $i < $nr; $i++) {
    echo sprintf("The blocksize of %s is %d\n", mhash_get_hash_name($i), mhash_get_block_size($i));
}
?>
</pre>
<address>
$CVSHeader: _freebeer/www/demo/Mhash.php,v 1.2 2004/03/07 17:51:33 ross Exp $
</address>

</body>
</html>