Why all hash algorithm are hexadecimal in PHP?

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • macm

    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('ripemd12 8', 'The quick brown fox jumped over
    the lazy dog.') .'</br>';
    echo 'ripemd160=>' .hash('ripemd16 0', 'The quick brown fox jumped over
    the lazy dog.') .'</br>';
    echo 'whirlpool=>' .hash('whirlpoo l', '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
  • larry@portcommodore.com

    #2
    Re: Why all hash algorithm are hexadecimal in PHP?

    More compact than using decimal and easier to type and/or read (if
    needed) than broader full alpha numeric formats.

    Comment

    • Jerry Stuckle

      #3
      Re: Why all hash algorithm are hexadecimal in PHP?

      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('ripemd12 8', 'The quick brown fox jumped over
      the lazy dog.') .'</br>';
      echo 'ripemd160=>' .hash('ripemd16 0', 'The quick brown fox jumped over
      the lazy dog.') .'</br>';
      echo 'whirlpool=>' .hash('whirlpoo l', '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.
      jstucklex@attgl obal.net
      =============== ===

      Comment

      • Jeremy

        #4
        Re: Why all hash algorithm are hexadecimal in PHP?

        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

        Comment

        • NC

          #5
          Re: Why all hash algorithm are hexadecimal in PHP?

          On Mar 25, 2:21 pm, macm <moura.ma...@gm ail.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():

          Convert a number between arbitrary bases


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

          Cheers,
          NC

          Comment

          Working...