Verzeichnisstruktur phpBB-3.1.0


Veröffentlicht
27.10.2014

So funktioniert es


Auf das letzte Element klicken. Dies geht jeweils ein Schritt zurück

Auf das Icon klicken, dies öffnet das Verzeichnis. Nochmal klicken schließt das Verzeichnis.
Auf den Verzeichnisnamen klicken, dies zeigt nur das Verzeichnis mit Inhalt an

      (Beispiel Datei-Icons)

Auf das Icon klicken um den Quellcode anzuzeigen

salted_md5.php

Zuletzt modifiziert: 09.10.2024, 12:54 - Dateigröße: 3.59 KiB


 001  <?php
 002  /**
 003  *
 004  * This file is part of the phpBB Forum Software package.
 005  *
 006  * @copyright (c) phpBB Limited <https://www.phpbb.com>
 007  * @license GNU General Public License, version 2 (GPL-2.0)
 008  *
 009  * For full copyright and license information, please see
 010  * the docs/CREDITS.txt file.
 011  *
 012  */
 013   
 014  namespace phpbb\passwords\driver;
 015   
 016  /**
 017  *
 018  * @version Version 0.1 / slightly modified for phpBB 3.1.x (using $H$ as hash type identifier)
 019  *
 020  * Portable PHP password hashing framework.
 021  *
 022  * Written by Solar Designer <solar at openwall.com> in 2004-2006 and placed in
 023  * the public domain.
 024  *
 025  * There's absolutely no warranty.
 026  *
 027  * The homepage URL for this framework is:
 028  *
 029  *    http://www.openwall.com/phpass/
 030  *
 031  * Please be sure to update the Version line if you edit this file in any way.
 032  * It is suggested that you leave the main version number intact, but indicate
 033  * your project name (after the slash) and add your own revision information.
 034  *
 035  * Please do not change the "private" password hashing method implemented in
 036  * here, thereby making your hashes incompatible.  However, if you must, please
 037  * change the hash type identifier (the "$P$") to something different.
 038  *
 039  * Obviously, since this code is in the public domain, the above are not
 040  * requirements (there can be none), but merely suggestions.
 041  *
 042  */
 043   
 044  class salted_md5 extends base
 045  {
 046      const PREFIX = '$H$';
 047   
 048      /**
 049      * {@inheritdoc}
 050      */
 051      public function get_prefix()
 052      {
 053          return self::PREFIX;
 054      }
 055   
 056      /**
 057      * {@inheritdoc}
 058      */
 059      public function is_legacy()
 060      {
 061          return true;
 062      }
 063   
 064      /**
 065      * {@inheritdoc}
 066      */
 067      public function hash($password, $setting = '')
 068      {
 069          if ($setting)
 070          {
 071              if (($settings = $this->get_hash_settings($setting)) === false)
 072              {
 073                  // Return md5 of password if settings do not
 074                  // comply with our standards. This will only
 075                  // happen if pre-determined settings are
 076                  // directly passed to the driver. The manager
 077                  // will not do this. Same as the old hashing
 078                  // implementatio in phpBB 3.0
 079                  return md5($password);
 080              }
 081          }
 082          else
 083          {
 084              $settings = $this->get_hash_settings($this->generate_salt());
 085          }
 086   
 087          $hash = md5($settings['salt'] . $password, true);
 088          do
 089          {
 090              $hash = md5($hash . $password, true);
 091          }
 092          while (--$settings['count']);
 093   
 094          $output = $settings['full'];
 095          $output .= $this->helper->hash_encode64($hash, 16);
 096   
 097          return $output;
 098      }
 099   
 100      /**
 101      * {@inheritdoc}
 102      */
 103      public function check($password, $hash, $user_row = array())
 104      {
 105          if (strlen($hash) !== 34)
 106          {
 107              return md5($password) === $hash;
 108          }
 109   
 110          return $this->helper->string_compare($hash, $this->hash($password, $hash));
 111      }
 112   
 113      /**
 114      * Generate salt for hashing method
 115      *
 116      * @return string Salt for hashing method
 117      */
 118      protected function generate_salt()
 119      {
 120          $count = 6;
 121   
 122          $random = $this->helper->get_random_salt($count);
 123   
 124          $salt = $this->get_prefix();
 125          $salt .= $this->helper->itoa64[min($count + 5, 30)];
 126          $salt .= $this->helper->hash_encode64($random, $count);
 127   
 128          return $salt;
 129      }
 130   
 131      /**
 132      * Get hash settings
 133      *
 134      * @param string $hash The hash that contains the settings
 135      *
 136      * @return bool|array Array containing the count_log2, salt, and full
 137      *        hash settings string or false if supplied hash is empty
 138      *        or contains incorrect settings
 139      */
 140      public function get_hash_settings($hash)
 141      {
 142          if (empty($hash))
 143          {
 144              return false;
 145          }
 146   
 147          $count_log2 = strpos($this->helper->itoa64, $hash[3]);
 148          $salt = substr($hash, 4, 8);
 149   
 150          if ($count_log2 < 7 || $count_log2 > 30 || strlen($salt) != 8)
 151          {
 152              return false;
 153          }
 154   
 155          return array(
 156              'count'    => 1 << $count_log2,
 157              'salt'    => $salt,
 158              'full'    => substr($hash, 0, 12),
 159          );
 160      }
 161   
 162      /**
 163      * {@inheritdoc}
 164      */
 165      public function get_settings_only($hash, $full = false)
 166      {
 167          return substr($hash, 3, 9);
 168      }
 169  }
 170