<?php
/**
 * @file hasher_password.php
 * @brief Ce script va hasher un mot de passe.
 *
 * @author hughes monget
 * @see http://monget.com/
 */
// http://fr.php.net/crypt
//define('AFFICHER_SALT', TRUE);
//define('AFFICHER_DEFAULT', TRUE);
$str_password                     = '';
$str_salt                         = '';
$str_hash_password_default        = '';
$str_hash_password_std_des        = '';
$str_hash_password_ext_des        = '';
$str_hash_password_crypt_md5      = '';
$str_hash_password_crypt_blowfish = '';
$str_hash_password_md5            = '';
$str_hash_password_sha1           = '';
$str_hash_password_sha256         = '';
$str_hash_password_crc32          = '';
if (isset($_REQUEST['password']) && is_string($_REQUEST['password']))
{
    $str_salt = array_merge(range('a', 'z'), range('A', 'Z'), range('0', '9'));
    //$str_salt = range(chr(64), chr(126));
    shuffle($str_salt);
    $str_salt = implode($str_salt);
    $str_password = (string) $_GET['password'];
    if (get_magic_quotes_gpc())
    {
        $str_password = stripslashes($str_password);
    }
    $str_hash_password_default        = crypt($str_password);
    $str_hash_password_std_des        = crypt($str_password, substr($str_salt, 0, 2));
    $str_hash_password_ext_des        = crypt($str_password, '_1000'.substr($str_salt, 0, 4));
    //$str_hash_password_ext_des        = crypt($str_password, '_'.substr($str_salt, 0, 8));
    $str_hash_password_crypt_md5      = crypt($str_password, '$1$'.substr($str_salt, 0, 12));
    $str_hash_password_crypt_blowfish = crypt($str_password, '$2y$10$'.substr($str_salt, 0, 22));
    $str_hash_password_md5            = md5($str_password);
    $str_hash_password_sha1           = sha1($str_password);
    $str_hash_password_sha256         = bin2hex(mhash(MHASH_SHA256, $str_password));
    $str_hash_password_crc32          = bin2hex(mhash(MHASH_CRC32, $str_password));
}
$str_password                     = htmlspecialchars($str_password);
$str_salt                         = htmlspecialchars($str_salt);
$str_hash_password_default        = htmlspecialchars($str_hash_password_default);
$str_hash_password_std_des        = htmlspecialchars($str_hash_password_std_des);
$str_hash_password_ext_des        = htmlspecialchars($str_hash_password_ext_des);
$str_hash_password_crypt_md5      = htmlspecialchars($str_hash_password_crypt_md5);
$str_hash_password_crypt_blowfish = htmlspecialchars($str_hash_password_crypt_blowfish);
$str_hash_password_md5            = htmlspecialchars($str_hash_password_md5);
$str_hash_password_sha1           = htmlspecialchars($str_hash_password_sha1);
$str_hash_password_sha256         = htmlspecialchars($str_hash_password_sha256);
$str_hash_password_crc32          = htmlspecialchars($str_hash_password_crc32);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
    <head>
        <title>Hashage de password</title>
        <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
        <style type="text/css">
        <!--
        table, input
        {
            border-collapse: collapse;
            font-family: monospace;
        }
        td, th
        {
            border: 1px solid #000;
            padding: 5px 5px;
        }
        th
        {
            text-align: right;
        }
        .password
        {
            width: 400px;
        }
        -->
        </style>
    </head>
    <body>
        <form method="get" action="">
            <table>
                <tr>
                    <th>PASSWORD</th>
                    <td>
                        <input type="text" class="password" id="password" name="password" value="<?php echo $str_password ?>" />
                    </td>
                </tr>
                <tr>
                    <td colspan="2">
                        <input type="submit" value="submit" />
                    </td>
                </tr>
<?php
if (defined('AFFICHER_SALT') && constant('AFFICHER_SALT'))
{
?>
                <tr>
                    <th>SALT</th>
                    <td>
                        <input type="text" class="password" readonly="readonly" value="<?php echo $str_salt ?>" onclick="javascript:this.select();" />
                    </td>
                </tr>
<?php
}
if (defined('AFFICHER_DEFAULT') && constant('AFFICHER_DEFAULT'))
{
?>
                <tr>
                    <th>DEFAULT</th>
                    <td>
                        <input type="text" class="password" readonly="readonly" value="<?php echo $str_hash_password_default ?>" onclick="javascript:this.select();" />
                        <?php var_export($str_hash_password_default === crypt($str_password, $str_hash_password_default)) ?>
                    </td>
                </tr>
                </tr>
<?php
}
?>
                <tr>
                    <th>CRYPT_STD_DES</th>
                    <td>
                        <input type="text" class="password" readonly="readonly" value="<?php echo $str_hash_password_std_des ?>" onclick="javascript:this.select();" />
                        <?php var_export($str_hash_password_std_des === crypt($str_password, $str_hash_password_std_des)) ?>
                    </td>
                </tr>
<?php
if (CRYPT_EXT_DES)
{
?>
                <tr>
                    <th>CRYPT_EXT_DES</th>
                    <td>
                        <input type="text" class="password" readonly="readonly" value="<?php echo $str_hash_password_ext_des ?>" onclick="javascript:this.select();" />
                    </td>
                </tr>
<?php
}
?>
                <tr>
                    <th>CRYPT_MD5</th>
                    <td>
                        <input type="text" class="password" readonly="readonly" value="<?php echo $str_hash_password_crypt_md5 ?>" onclick="javascript:this.select();" />
                        <?php var_export($str_hash_password_crypt_md5 === crypt($str_password, $str_hash_password_crypt_md5)) ?>
                    </td>
                </tr>
<?php
if (1 OR CRYPT_BLOWFISH)
{
?>
                <tr>
                    <th>CRYPT_BLOWFISH</th>
                    <td>
                        <input type="text" class="password" readonly="readonly" value="<?php echo $str_hash_password_crypt_blowfish ?>" onclick="javascript:this.select();" />
                    </td>
                </tr>
<?php
}
?>
                <tr>
                    <th>MD5</th>
                    <td>
                        <input type="text" class="password" readonly="readonly" value="<?php echo $str_hash_password_md5 ?>" onclick="javascript:this.select();" />
                    </td>
                </tr>
                <tr>
                    <th>SHA1</th>
                    <td>
                        <input type="text" class="password" readonly="readonly" value="<?php echo $str_hash_password_sha1 ?>" onclick="javascript:this.select();" />
                    </td>
                </tr>
                <tr>
                    <th>SHA256</th>
                    <td>
                        <input type="text" class="password" readonly="readonly" value="<?php echo $str_hash_password_sha256 ?>" onclick="javascript:this.select();" />
                    </td>
                </tr>
                <tr>
                    <th>CRC32</th>
                    <td>
                        <input type="text" class="password" readonly="readonly" value="<?php echo $str_hash_password_crc32 ?>" onclick="javascript:this.select();" />
                    </td>
                </tr>
            </table>
        </form>
<?php
echo '<hr />';
highlight_file(__FILE__);
?>
    </body>
</html>