note 61741 added to function.sha1-file
| From: | gubatron at gmail dot com | 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