Exemplo n.º 1
0
/**
 * This is the core SHA-1 calculation routine, used by sha1().
 *
 * @param int[] $x
 * @param int $len
 */
function sha1_core($x, $len)
{
    @($x[$len >> 5] |= 0x80 << 24 - $len % 32);
    $x[($len + 64 >> 9 << 4) + 15] = $len;
    $w = array();
    $a = 1732584193;
    $b = -271733879;
    $c = -1732584194;
    $d = 271733878;
    $e = -1009589776;
    for ($i = 0, $n = count($x); $i < $n; $i += 16) {
        $olda = $a;
        $oldb = $b;
        $oldc = $c;
        $oldd = $d;
        $olde = $e;
        for ($j = 0; $j < 80; $j++) {
            if ($j < 16) {
                $w[$j] = isset($x[$i + $j]) ? $x[$i + $j] : 0;
            } else {
                $w[$j] = sha1_rol($w[$j - 3] ^ $w[$j - 8] ^ $w[$j - 14] ^ $w[$j - 16], 1);
            }
            $t = sha1_rol($a, 5) + sha1_ft($j, $b, $c, $d) + $e + $w[$j] + sha1_kt($j);
            $e = $d;
            $d = $c;
            $c = sha1_rol($b, 30);
            $b = $a;
            $a = $t;
        }
        $a += $olda;
        $b += $oldb;
        $c += $oldc;
        $d += $oldd;
        $e += $olde;
    }
    return sprintf('%08x%08x%08x%08x%08x', $a, $b, $c, $d, $e);
}
 function sha1($str, $raw_output = FALSE)
 {
     if ($raw_output === TRUE) {
         return pack('H*', sha1($str, FALSE));
     }
     $x = sha1_str2blks_SHA1($str);
     $a = 1732584193;
     $b = -271733879;
     $c = -1732584194;
     $d = 271733878;
     $e = -1009589776;
     $x_count = count($x);
     for ($i = 0; $i < $x_count; $i += 16) {
         $olda = $a;
         $oldb = $b;
         $oldc = $c;
         $oldd = $d;
         $olde = $e;
         for ($j = 0; $j < 80; $j++) {
             $w[$j] = $j < 16 ? $x[$i + $j] : sha1_rol($w[$j - 3] ^ $w[$j - 8] ^ $w[$j - 14] ^ $w[$j - 16], 1);
             $t = sha1_safe_add(sha1_safe_add(sha1_rol($a, 5), sha1_ft($j, $b, $c, $d)), sha1_safe_add(sha1_safe_add($e, $w[$j]), sha1_kt($j)));
             $e = $d;
             $d = $c;
             $c = sha1_rol($b, 30);
             $b = $a;
             $a = $t;
         }
         $a = sha1_safe_add($a, $olda);
         $b = sha1_safe_add($b, $oldb);
         $c = sha1_safe_add($c, $oldc);
         $d = sha1_safe_add($d, $oldd);
         $e = sha1_safe_add($e, $olde);
     }
     return sprintf('%08x%08x%08x%08x%08x', $a, $b, $c, $d, $e);
 }