sha1_file

(PHP 4 >= 4.3.0, PHP 5)

sha1_file -- Возвращает SHA1 хэш файла

Описание

string sha1_file ( string filename [, bool raw_output] )

Вычисляет SHA1 хэш файла, имя которого задано аргументом filename, используя алгоритм US Secure Hash Algorithm 1 и возвращает этот хэш. Хэш представляет собой 40-значное шестнадцатеричное число. Если необязательный аргумент raw_output имеет значение TRUE, то возвращается двоичная строка из 20 символов.

Замечание: Необязательный аргумент raw_output был добавлен в PHP 5.0.0 и по умолчанию равен FALSE

См. также описание функций sha1(), crc32() и md5_file().



sha1_file
gubatron at gmail dot com
10-Feb-2006 07:02
P2P programs like LimeWire utilize sha1 to identify files. However they do it in base32. Here's an utility class if you want to write a Gnutella client in PHP5

/**
Utility base32 SHA1 class for PHP5
Copyright (C) 2006  Karl Magdsick (original author for Python)
                   Angel Leon (ported to PHP5)
                   Lime Wire LLC

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
*/
class SHA1 {
  static $BASE32_ALPHABET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567';

  /** Given a file it creates a magnetmix */
  static function fileSHA1($file) {
   $raw = sha1_file($file,true);
   return SHA1::base32encode($raw);
  } //fileSHA1

  /** Takes raw input and converts it to base32 */
  static function base32encode($input) {
   $output = '';
   $position = 0;
   $storedData = 0;
   $storedBitCount = 0;
   $index = 0;

   while ($index < strlen($input)) {
     $storedData <<= 8;
     $storedData += ord($input[$index]);
     $storedBitCount += 8;
     $index += 1;

     //take as much data as possible out of storedData
     while ($storedBitCount >= 5) {
       $storedBitCount -= 5;
       $output .= SHA1::$BASE32_ALPHABET[$storedData >> $storedBitCount];
       $storedData &= ((1 << $storedBitCount) - 1);
     }
   } //while

   //deal with leftover data
   if ($storedBitCount > 0) {
     $storedData <<= (5-$storedBitCount);
     $output .= SHA1::$BASE32_ALPHABET[$storedData];
   }

   return $output;
  } //base32encode

}

<setlocalesha1>
 Last updated: Tue, 15 Nov 2005