User Tools

Site Tools


genwikihash.php

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
genwikihash.php [2006/11/13 13:44]
206.161.205.187
genwikihash.php [2006/11/13 14:48] (current)
andi old revision restored
Line 1: Line 1:
 +From command line (using php-cli):
 +<code>
 +$ php genWikihash.php <clear text pass> [<crypt method (defaults to smd5)>]
 +</code>
 +
 +<code php>
 +<?php
 +// call it: php dokupass.php <clear text pass> <method (default smd5)>
 +// Tomas V.V.Cox <cox@idecnet.com>
 +
 +function msg($str) { die($str); }
 +
 +/**
 + * Encrypts a password using the given method and salt
 + *
 + * If the selected method needs a salt and none was given, a random one
 + * is chosen.
 + *
 + * The following methods are understood:
 + *
 +   smd5  - Salted MD5 hashing
 +   md5   - Simple MD5 hashing
 +   sha1  - SHA1 hashing
 +   ssha  - Salted SHA1 hashing
 +   crypt - Unix crypt
 +   mysql - MySQL password (old method)
 +   my411 - MySQL 4.1.1 password
 + *
 + * @author  Andreas Gohr <andi@splitbrain.org>
 + * @return  string  The crypted password
 + */
 +function auth_cryptPassword($clear,$method='',$salt=''){
 +  global $conf;
 +  if(empty($method)) $method = $conf['passcrypt'];
 +
 +  //prepare a salt
 +  if(empty($salt)) $salt = md5(uniqid(rand(), true));
 +
 +  switch(strtolower($method)){
 +    case 'smd5':
 +        return crypt($clear,'$1$'.substr($salt,0,8).'$');
 +    case 'md5':
 +      return md5($clear);
 +    case 'sha1':
 +      return sha1($clear);
 +    case 'ssha':
 +      $salt=substr($salt,0,4);
 +      return '{SSHA}'.base64_encode(pack("H*", sha1($clear.$salt)).$salt);
 +    case 'crypt':
 +      return crypt($clear,substr($salt,0,2));
 +    case 'mysql':
 +      //from http://www.php.net/mysql comment by <soren at byu dot edu>
 +      $nr=0x50305735;
 +      $nr2=0x12345671;
 +      $add=7;
 +      $charArr = preg_split("//", $clear);
 +      foreach ($charArr as $char) {
 +        if (($char == '') || ($char == ' ') || ($char == '\t')) continue;
 +        $charVal = ord($char);
 +        $nr ^= ((($nr & 63) + $add) * $charVal) + ($nr << 8);
 +        $nr2 += ($nr2 << 8) ^ $nr;
 +        $add += $charVal;
 +      }
 +      return sprintf("%08x%08x", ($nr & 0x7fffffff), ($nr2 & 0x7fffffff));
 +    case 'my411':
 +      return '*'.sha1(pack("H*", sha1($clear)));
 +    default:
 +      msg("Unsupported crypt method $method",-1);
 +  }
 +}
 +if (empty($_SERVER['argv'][1])) {
 +    die("Usage: php " . $_SERVER['argv'][0] . " <clear pass text> <method (default smd5)>\n");
 +}
 +$method = !empty($_SERVER['argv'][2]) ? $_SERVER['argv'][2] : 'smd5';
 +echo auth_cryptPassword($_SERVER['argv'][1], $method) . "\n";
 +
 +?>
 +</code>
 +
 +
 +== Comments ==
 +
 +Roland Eckert wrote 2006-Aug-06 16:41:16 CET:
 +
 +I also had luck generating a valid hash using the command line
 +
 +<code php>
 +php -r 'echo md5("mypassword")."\n";'
 +</code>
 +
  
genwikihash.php.txt ยท Last modified: 2006/11/13 14:48 by andi