note 109148 added to function.hash-algos
| From: | holdoffhunger at gmail dot com | Date: | Sat, 23 Jun 2012 11:42:53 +0000 |
| Subject: | note 109148 added to function.hash-algos | ||
| Groups: | php.notes | ||
| Request: | Send a blank email to php-notes+get-188767@lists.php.net to get a copy of this message | ||
If you print the results of the hash_algos function and look at all of the available hashing
functions, you will find three with duplicate functions: md5, sha1, crc32, and sha256. That means
you can call the any of these function with either its own function or the hash function. For
example, with the SHA1 function :
<?php
// Author: holdoffhunger@gmail.com
$sha1_first_value = sha1("secret", FALSE);
$sha1_second_value = hash("sha1", "secret", FALSE);
?>
However, the alternate title for the SHA256 algorithm is "getImageSignature", as part of
the ImageMagick application package. Oddly, the CRC32 function returns different values when called
from its own particular function (crc32()) compared to when it's called through the hash
function (hash()). This leads me to suspect that they may be different implementations of the crc32
algorithm altogether. The different functions for SHA1 and MD5, however, produce the same results.
The SHA-256 algorithm, as implemented in the ImageMagick function, also produces different results
compared to the results of the hash_file() function within the Hash application package.
For the String "1234567890", the single CRC32() Function (which doesn't have an
option for binary, "raw data" representation) produces "639479525", but when
called through the Hash() Function, that same string produces "b6536850". I cannot find
the relationship of any of these values, as they are not inverses of each other, nor is their sum or
difference equal to any power of two (as I suspected they might be an equal distance from 0 or
2^32).
Both the SHA1 and MD5 alternate functions have the parameter of "TRUE/FALSE" at the end to
indicate whether the result is given in binary (raw data) or not. Unfortunately, this often turns
out to be data that doesn't print very well. It is recommended to be printed with the
statement of printf("%u\n", $crc_32_value);. However, that often doesn't produce any
usable results, either. The only method I have discovered is the "bin2hex" function, like
so :
<?php
$md5_value = hash("md5", "secret", FALSE);
$md5_value_in_hex = bin2hex($md5_value);
?>
However, bin2hex returns a hexadecimal representation, whereas you probably wanted a string of
binary 1's and 0's. You can use the base_convert function, such as
base_convert($md5_value_in_hex, 16, 2);. However, base_convert doesn't work on large numbers,
so you have to write your own function for converting Hex to Binary.
One other thing that will probably catch your attention is that half of the listed algorithms have
similar names, but are represented with different numbers. That means that the algorithm takes
parameters itself, such as number of bits for the resultant hash value and number of rounds to do in
producing the hashed result. The first number in the title of the Hash Function usually indicates
the size of the hash result, such as 128 bit for "haval128,3" and 160 bit for
"tiger160,4". The second number, however, indicates the number of rounds, such as 5
rounds for "haval224,5".
----
Server IP: 69.147.83.197
Probable Submitter: 68.9.137.178
----
Manual Page -- http://www.php.net/manual/en/function.hash-algos.php
Edit -- https://master.php.net/note/edit/109148
Del: integrated -- https://master.php.net/note/delete/109148/integrated
Del: useless -- https://master.php.net/note/delete/109148/useless
Del: bad code -- https://master.php.net/note/delete/109148/bad+code
Del: spam -- https://master.php.net/note/delete/109148/spam
Del: non-english -- https://master.php.net/note/delete/109148/non-english
Del: in docs -- https://master.php.net/note/delete/109148/in+docs
Del: other reasons-- https://master.php.net/note/delete/109148
Reject -- https://master.php.net/note/reject/109148
Search -- https://master.php.net/manage/user-notes.php