Verzeichnisstruktur phpBB-3.3.15


Veröffentlicht
28.08.2024

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

helper.php

Zuletzt modifiziert: 02.04.2025, 15:02 - Dateigröße: 3.52 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  class helper
017  {
018      /**
019      * @var \phpbb\config\config
020      */
021      protected $config;
022   
023      /**
024      * base64 alphabet
025      * @var string
026      */
027      public $itoa64 = './0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
028   
029      /**
030      * Construct a driver helper object
031      *
032      * @param \phpbb\config\config $config phpBB configuration
033      */
034      public function __construct(\phpbb\config\config $config)
035      {
036          $this->config = $config;
037      }
038   
039      /**
040      * Base64 encode hash
041      *
042      * @param string $input Input string
043      * @param int $count Input string length
044      *
045      * @return string base64 encoded string
046      */
047      public function hash_encode64($input, $count)
048      {
049          $output = '';
050          $i = 0;
051   
052          do
053          {
054              $value = ord($input[$i++]);
055              $output .= $this->itoa64[$value & 0x3f];
056   
057              if ($i < $count)
058              {
059                  $value |= ord($input[$i]) << 8;
060              }
061   
062              $output .= $this->itoa64[($value >> 6) & 0x3f];
063   
064              if ($i++ >= $count)
065              {
066                  break;
067              }
068   
069              if ($i < $count)
070              {
071                  $value |= ord($input[$i]) << 16;
072              }
073   
074              $output .= $this->itoa64[($value >> 12) & 0x3f];
075   
076              if ($i++ >= $count)
077              {
078                  break;
079              }
080   
081              $output .= $this->itoa64[($value >> 18) & 0x3f];
082          }
083          while ($i < $count);
084   
085          return $output;
086      }
087   
088      /**
089      * Return unique id
090      *
091      * @param string $extra Additional entropy
092      *
093      * @return string Unique id
094      */
095      public function unique_id($extra = 'c')
096      {
097          static $dss_seeded = false;
098   
099          $val = $this->config['rand_seed'] . microtime();
100          $val = md5($val);
101          $this->config['rand_seed'] = md5($this->config['rand_seed'] . $val . $extra);
102   
103          if ($dss_seeded !== true && ($this->config['rand_seed_last_update'] < time() - rand(1,10)))
104          {
105              $this->config->set('rand_seed_last_update', time(), true);
106              $this->config->set('rand_seed', $this->config['rand_seed'], true);
107              $dss_seeded = true;
108          }
109   
110          return substr($val, 4, 16);
111      }
112   
113      /**
114      * Get random salt with specified length
115      *
116      * @param int $length Salt length
117      * @param string $rand_seed Seed for random data (optional). For tests.
118      *
119      * @return string Random salt with specified length
120      */
121      public function get_random_salt($length, $rand_seed = '/dev/urandom')
122      {
123          $random = '';
124   
125          if (($fh = @fopen($rand_seed, 'rb')))
126          {
127              $random = fread($fh, $length);
128              fclose($fh);
129          }
130   
131          if (strlen($random) < $length)
132          {
133              $random = '';
134              $random_state = $this->unique_id();
135   
136              for ($i = 0; $i < $length; $i += 16)
137              {
138                  $random_state = md5($this->unique_id() . $random_state);
139                  $random .= pack('H*', md5($random_state));
140              }
141              $random = substr($random, 0, $length);
142          }
143          return $random;
144      }
145   
146      /**
147       * Compare two strings byte by byte
148       *
149       * @param string $string_a The first string
150       * @param string $string_b The second string
151       *
152       * @return bool True if strings are the same, false if not
153       */
154      public function string_compare($string_a, $string_b)
155      {
156          // Return if input variables are not strings or if length does not match
157          if (!is_string($string_a) || !is_string($string_b) || strlen($string_a) != strlen($string_b))
158          {
159              return false;
160          }
161   
162          // Use hash_equals() if it's available
163          if (function_exists('hash_equals'))
164          {
165              return hash_equals($string_a, $string_b);
166          }
167   
168          $difference = 0;
169   
170          for ($i = 0; $i < strlen($string_a) && $i < strlen($string_b); $i++)
171          {
172              $difference |= ord($string_a[$i]) ^ ord($string_b[$i]);
173          }
174   
175          return $difference === 0;
176      }
177  }
178