note 61741 added to function.sha1-file

From: Date: Fri, 10 Feb 2006 15:02:53 +0000
Subject: note 61741 added to function.sha1-file
Groups: php.notes 
Request: Send a blank email to php-notes+get-103459@lists.php.net to get a copy of this message
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 } ---- Server IP: 216.194.113.175 Probable Submitter: 216.27.158.74 ---- Manual Page -- http://www.php.net/manual/en/function.sha1-file.php Edit -- http://master.php.net/manage/user-notes.php?action=edit+61741 Delete: added to the manual -- http://master.php.net/manage/user-notes.php?action=delete+61741&report=yes&reason=added+to+the+manual Delete: bad code -- http://master.php.net/manage/user-notes.php?action=delete+61741&report=yes&reason=bad+code Delete: spam -- http://master.php.net/manage/user-notes.php?action=delete+61741&report=yes&reason=spam Delete: useless -- http://master.php.net/manage/user-notes.php?action=delete+61741&report=yes&reason=useless Delete: non-english -- http://master.php.net/manage/user-notes.php?action=delete+61741&report=yes&reason=non-english Delete: already in docs -- http://master.php.net/manage/user-notes.php?action=delete+61741&report=yes&reason=already+in+docs Delete: other reasons -- http://master.php.net/manage/user-notes.php?action=delete+61741&report=yes Reject -- http://master.php.net/manage/user-notes.php?action=reject+61741&report=yes Search -- http://master.php.net/manage/user-notes.php

« previous php.notes (#103459) next »