469,625 Members | 1,917 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 469,625 developers. It's quick & easy.

Why all hash algorithm are hexadecimal in PHP?

Hi Folks

I tested

<?php
echo 'sha256=>' .hash('sha256', 'The quick brown fox jumped over the
lazy dog.') .'</br>';
echo 'sha384=>' .hash('sha384', 'The quick brown fox jumped over the
lazy dog.') .'</br>';
echo 'sha512=>' .hash('sha512', 'The quick brown fox jumped over the
lazy dog.') .'</br>';
echo 'ripemd128=>' .hash('ripemd128', 'The quick brown fox jumped over
the lazy dog.') .'</br>';
echo 'ripemd160=>' .hash('ripemd160', 'The quick brown fox jumped over
the lazy dog.') .'</br>';
echo 'whirlpool=>' .hash('whirlpool', 'The quick brown fox jumped over
the lazy dog.') .'</br>';
echo 'tiger128,3=>' .hash('tiger128,3', 'The quick brown fox jumped
over the lazy dog.') .'</br>';
echo 'tiger160,3=>' .hash('tiger160,3', 'The quick brown fox jumped
over the lazy dog.') .'</br>';
echo 'tiger192,4=>' .hash('tiger192,4', 'The quick brown fox jumped
over the lazy dog.') .'</br>';
echo 'snefru=>' .hash('snefru', 'The quick brown fox jumped over the
lazy dog.') .'</br>';
echo 'gost=>' .hash('gost', 'The quick brown fox jumped over the lazy
dog.') .'</br>';
echo 'adler32=>' .hash('adler32', 'The quick brown fox jumped over the
lazy dog.') .'</br>';
echo 'crc32=>' .hash('crc32', 'The quick brown fox jumped over the
lazy dog.') .'</br>';
echo 'crc32b=>' .hash('crc32b', 'The quick brown fox jumped over the
lazy dog.') .'</br>';
echo 'haval128,3=>' .hash('haval128,3', 'The quick brown fox jumped
over the lazy dog.') .'</br>';
echo 'haval256,5=>' .hash('haval256,5', 'The quick brown fox jumped
over the lazy dog.') .'</br>';
?>

As you can see all results are hexadecimal.

Youtube for example have http://youtube.com/watch?v=n5pkDB7zEeo

n5pkDB7zEeo inst hexadecimal so the comparison is simple.

md5 algorithm have 32^16 = 1,2e^24

youtube algorithm have 11^63 = 405e^63 (because is case sensitive so
combination is [0-9]+[a-Z] + "_" ) (Could have more caracteres!)

So with only 11 caracteres I can have much more combination and much
less collision.

So how can I create a hash algorithm like youtube? with 11 caracteres
[0-9]+[a-Z] + "_"

Some tips? How compile?

Cheers

Mario
Mar 25 '08 #1
4 3267
More compact than using decimal and easier to type and/or read (if
needed) than broader full alpha numeric formats.
Mar 25 '08 #2
macm wrote:
Hi Folks

I tested

<?php
echo 'sha256=>' .hash('sha256', 'The quick brown fox jumped over the
lazy dog.') .'</br>';
echo 'sha384=>' .hash('sha384', 'The quick brown fox jumped over the
lazy dog.') .'</br>';
echo 'sha512=>' .hash('sha512', 'The quick brown fox jumped over the
lazy dog.') .'</br>';
echo 'ripemd128=>' .hash('ripemd128', 'The quick brown fox jumped over
the lazy dog.') .'</br>';
echo 'ripemd160=>' .hash('ripemd160', 'The quick brown fox jumped over
the lazy dog.') .'</br>';
echo 'whirlpool=>' .hash('whirlpool', 'The quick brown fox jumped over
the lazy dog.') .'</br>';
echo 'tiger128,3=>' .hash('tiger128,3', 'The quick brown fox jumped
over the lazy dog.') .'</br>';
echo 'tiger160,3=>' .hash('tiger160,3', 'The quick brown fox jumped
over the lazy dog.') .'</br>';
echo 'tiger192,4=>' .hash('tiger192,4', 'The quick brown fox jumped
over the lazy dog.') .'</br>';
echo 'snefru=>' .hash('snefru', 'The quick brown fox jumped over the
lazy dog.') .'</br>';
echo 'gost=>' .hash('gost', 'The quick brown fox jumped over the lazy
dog.') .'</br>';
echo 'adler32=>' .hash('adler32', 'The quick brown fox jumped over the
lazy dog.') .'</br>';
echo 'crc32=>' .hash('crc32', 'The quick brown fox jumped over the
lazy dog.') .'</br>';
echo 'crc32b=>' .hash('crc32b', 'The quick brown fox jumped over the
lazy dog.') .'</br>';
echo 'haval128,3=>' .hash('haval128,3', 'The quick brown fox jumped
over the lazy dog.') .'</br>';
echo 'haval256,5=>' .hash('haval256,5', 'The quick brown fox jumped
over the lazy dog.') .'</br>';
?>

As you can see all results are hexadecimal.

Youtube for example have http://youtube.com/watch?v=n5pkDB7zEeo

n5pkDB7zEeo inst hexadecimal so the comparison is simple.

md5 algorithm have 32^16 = 1,2e^24

youtube algorithm have 11^63 = 405e^63 (because is case sensitive so
combination is [0-9]+[a-Z] + "_" ) (Could have more caracteres!)

So with only 11 caracteres I can have much more combination and much
less collision.

So how can I create a hash algorithm like youtube? with 11 caracteres
[0-9]+[a-Z] + "_"

Some tips? How compile?

Cheers

Mario
What do y0ou need more than that for? The chances of a collision with
md5 and the rest are VERY remote.

You're much more likely to have a duplicate in the 11 characters than
you will in any of the hashes.

--
==================
Remove the "x" from my email address
Jerry Stuckle
JDS Computer Training Corp.
js*******@attglobal.net
==================

Mar 25 '08 #3
macm wrote:
As you can see all results are hexadecimal.

Youtube for example have http://youtube.com/watch?v=n5pkDB7zEeo

n5pkDB7zEeo inst hexadecimal so the comparison is simple.

md5 algorithm have 32^16 = 1,2e^24

youtube algorithm have 11^63 = 405e^63 (because is case sensitive so
combination is [0-9]+[a-Z] + "_" ) (Could have more caracteres!)

So with only 11 caracteres I can have much more combination and much
less collision.

So how can I create a hash algorithm like youtube? with 11 caracteres
[0-9]+[a-Z] + "_"

Some tips? How compile?

Cheers

Mario
Your math is backwards. Youtube's scheme has 63^11 (not 11^63)
combinations, which is about 6.2e19 possibilities.

If you want shorter, url-safe identifiers, you could do something
similar with base64. For example, if you bump the identifier up to 12
characters (multiples of 4 are good for base64) you would get 9 bytes of
data = (2^8)^9 = 2^72 ~= 4.7e21 combinations. Just replace the '/' and
'+' characters from base64 with different, url-safe characters (because
'/' and '+' have meaning in a URI).

Jeremy
Mar 25 '08 #4
NC
On Mar 25, 2:21 pm, macm <moura.ma...@gmail.comwrote:
>
how can I create a hash algorithm like youtube?
Why do you think it's a hash? It's probably a unique ID represented
as a 62-based number...
Some tips? How compile?
If you are content with case-insensitive IDs (meaning 36-based
numbers) you can use base_convert():

http://php.net/base_convert

If you insist on higher base, you would have to write the conversion
routine yourself...

Cheers,
NC
Mar 26 '08 #5

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

6 posts views Thread by Weiguang Shi | last post: by
34 posts views Thread by pembed2003 | last post: by
4 posts views Thread by flipdog | last post: by
5 posts views Thread by HamuNaptra | last post: by
1 post views Thread by Fernando Barsoba | last post: by
5 posts views Thread by lavu | last post: by
1 post views Thread by Wayne Deleersnyder | last post: by
16 posts views Thread by Robin Becker | last post: by
6 posts views Thread by j1mb0jay | last post: by
reply views Thread by gheharukoh7 | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.