<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/ref.strings.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'de',
  ),
  'this' => 
  array (
    0 => 'function.crypt.php',
    1 => 'crypt',
    2 => 'Einweg-String-Hashing',
  ),
  'up' => 
  array (
    0 => 'ref.strings.php',
    1 => 'String-Funktionen',
  ),
  'prev' => 
  array (
    0 => 'function.crc32.php',
    1 => 'crc32',
  ),
  'next' => 
  array (
    0 => 'function.echo.php',
    1 => 'echo',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'de',
    'path' => 'reference/strings/functions/crypt.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="function.crypt" class="refentry">
 <div class="refnamediv">
  <h1 class="refname">crypt</h1>
  <p class="verinfo">(PHP 4, PHP 5, PHP 7, PHP 8)</p><p class="refpurpose"><span class="refname">crypt</span> &mdash; <span class="dc-title">Einweg-String-Hashing</span></p>

 </div>

 <div id="function.crypt-refsynopsisdiv">
  <div class="warning"><strong class="warning">Warnung</strong><p class="simpara">Diese Funktion ist (bis jetzt)
nicht binärsicher!</p></div>
 </div>

 <div class="refsect1 description" id="refsect1-function.crypt-description">
  <h3 class="title">Beschreibung</h3>
  <div class="methodsynopsis dc-description">
   <span class="methodname"><strong>crypt</strong></span>(<span class="methodparam"><span class="attribute"><a href="class.sensitiveparameter.php">#[\SensitiveParameter]</a> </span><span class="type"><a href="language.types.string.php" class="type string">string</a></span> <code class="parameter">$string</code></span>, <span class="methodparam"><span class="type"><a href="language.types.string.php" class="type string">string</a></span> <code class="parameter">$salt</code></span>): <span class="type"><a href="language.types.string.php" class="type string">string</a></span></div>

  <p class="para rdfs-comment">
   <span class="function"><strong>crypt()</strong></span> gibt einen Hash-String zurück, der unter
   Verwendung des <abbr class="abbrev">DES</abbr>-basierten
   Unix-Standard-Hashingalgorithmus oder eines anderen Algorithmus erstellt
   wurde. <span class="function"><a href="function.password-verify.php" class="function">password_verify()</a></span> ist kompatibel zu
   <span class="function"><strong>crypt()</strong></span>. Daher können Passwort-Hashes, die mit
   <span class="function"><strong>crypt()</strong></span> erzeugt wurden, mit
   <span class="function"><a href="function.password-verify.php" class="function">password_verify()</a></span> verwendet werden.
  </p>
  <p class="para">
   Vor PHP 8.0.0 war der Parameter <code class="parameter">salt</code> optional.
   Allerdings erzeugt <span class="function"><strong>crypt()</strong></span> ohne das
   <code class="parameter">salt</code> einen schwachen Hash und einen
   <strong><code><a href="errorfunc.constants.php#constant.e-notice">E_NOTICE</a></code></strong>-Fehler. Es ist darauf zu achten, ein
   ausreichend starkes Salt für bessere Sicherheit anzugeben.
  </p>
  <p class="para">
   <span class="function"><a href="function.password-hash.php" class="function">password_hash()</a></span> verwendet einen starken Hash, erzeugt
   ein starkes Salt und wendet automatisch eine angemessene Anzahl von Runden
   an. <span class="function"><a href="function.password-hash.php" class="function">password_hash()</a></span> ist ein einfacher
   <span class="function"><strong>crypt()</strong></span>-Wrapper und kompatibel zu bestehenden
   Passwort-Hashes. Die Verwendung von <span class="function"><a href="function.password-hash.php" class="function">password_hash()</a></span> wird
   empfohlen.
  </p>
  <p class="para">
   Der verwendete Algorithmus wird durch das Salt-Argument bestimmt. Wird kein
   Salt angegeben, erzeugt PHP entweder einen 12-Zeichen-MD5-Salt oder, falls
   MD5 nicht verfügbar ist, einen 2-Zeichen-DES-Salt. PHP setzt eine Konstante
   <strong><code><a href="string.constants.php#constant.crypt-salt-length">CRYPT_SALT_LENGTH</a></code></strong>, welche die Länge des längsten von
   den Algorithmen unterstützten Salts enthält.
  </p>
  <p class="para">
   Der Standard-DES-Algorithmus gibt den Salt als erste 2 Zeichen zurück.
   Weiterhin werden nur die ersten acht Zeichen von
   <code class="parameter">string</code> genutzt. Wenn also eine längere Zeichenkette
   verwendet wird, die mit denselben 8 Buchstaben beginnt, so erhalten Sie
   denselben Rückgabewert (sofern Sie ebenfalls den gleichen Salt genutzt
   haben).
  </p>
  <p class="simpara">
   Die folgenden Hash-Typen werden unterstützt.
  </p>
  <ul class="itemizedlist">
   <li class="listitem">
    <span class="simpara">
     <strong><code><a href="string.constants.php#constant.crypt-std-des">CRYPT_STD_DES</a></code></strong> - Standard DES-Hash mit einem
     2-Zeichen-Salt aus dem Alphabet &quot;./0-9A-Za-z&quot;. Bei Nutzung eines
     ungültigen Zeichens schlägt <span class="function"><strong>crypt()</strong></span> fehl.
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <strong><code><a href="string.constants.php#constant.crypt-ext-des">CRYPT_EXT_DES</a></code></strong> - Erweitertes DES-basiertes Hashing
     mit einem 9-Zeichen-Salt, bestehend aus einem Unterstrich, gefolgt von 4
     Zeichen Iterationsanzahl und 4 Zeichen Salt. Jede dieser vierstelligen
     Zeichenketten kodiert 24 Bits, das Zeichen mit dem niedrigsten Wert
     zuerst. Die Werte <code class="literal">0</code> bis <code class="literal">63</code> werden
     als <code class="literal">./0-9A-Za-z</code> kodiert. Bei Nutzung eines ungültigen
     Zeichens schlägt <span class="function"><strong>crypt()</strong></span> fehl.
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <strong><code><a href="string.constants.php#constant.crypt-md5">CRYPT_MD5</a></code></strong> - MD5-Hashing mit 12-Zeichen-Salt,
     beginnend mit &quot;$1$&quot;
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <strong><code><a href="string.constants.php#constant.crypt-blowfish">CRYPT_BLOWFISH</a></code></strong> - Blowfish-Hash mit einem Salt
     folgenden Aufbaus: &quot;$2a$&quot;, &quot;$2x$&quot; oder &quot;$2y$&quot;, gefolgt von einem
     zweistelligen Kostenparameter, einem weiteren &quot;$&quot; und 22 Zeichen des
     Alphabets &quot;./0-9A-Za-z&quot;. Bei Nutzung eines ungültigen Zeichens gibt
     crypt() eine leere Zeichenkette zurück. Der zweistellige Kostenparameter ist
     der binäre Logarithmus der Iterationsanzahl für den zugrundeliegenden
     Blowfish-basierten Hash-Algorithmus und muss im Bereich von 04-31
     liegen. Bei Nutzung von Werten außerhalb dieses Bereichs schlägt crypt()
     fehl. &quot;$2x$&quot;-Hashes sind potenziell schwach; &quot;$2a$&quot;-Hashes sind
     kompatibel und entschärfen diese Schwäche. Für neue Hashes sollte &quot;$2y$&quot;
     verwendet werden.
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <strong><code><a href="string.constants.php#constant.crypt-sha256">CRYPT_SHA256</a></code></strong> - SHA-256-Hash mit einem
     16-Zeichen-Salt, beginnend mit &quot;$5$&quot;. Wenn anschließend
     &quot;rounds=&lt;N&gt;$&quot; folgt, gibt der Zahlenwert von N die Iterationsanzahl
     an, ansonsten wird 5000 als Anzahl angenommen. Die Anzahl muss zwischen
     1000 und 999,999,999 liegen. Falls ein Wert außerhalb dieses Bereichs
     angegeben wird, wird die jeweils näher liegende Grenze als Anzahl
     genutzt.
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <strong><code><a href="string.constants.php#constant.crypt-sha512">CRYPT_SHA512</a></code></strong> - SHA-512-Hash mit einem
     16-Zeichen-Salt, beginnend mit &quot;$6$&quot;. Wenn anschließend
     &quot;rounds=&lt;N&gt;$&quot; folgt, gibt der Zahlenwert von N die Iterationsanzahl
     an, ansonsten wird 5000 als Anzahl angenommen. Die Anzahl muss zwischen
     1000 und 999,999,999 liegen. Falls ein Wert außerhalb dieses Bereichs
     angegeben wird, wird die jeweils näher liegende Grenze als Anzahl
     genutzt.
    </span>
   </li>
  </ul>
 </div>


 <div class="refsect1 parameters" id="refsect1-function.crypt-parameters">
  <h3 class="title">Parameter-Liste</h3>
  <p class="para">
   <dl>
    
     <dt><code class="parameter">string</code></dt>
     <dd>
      <p class="para">
       Die zu hashende Zeichenkette.
      </p>
      <div class="caution"><strong class="caution">Achtung</strong>
       <p class="para">
        Die Verwendung des <strong><code><a href="string.constants.php#constant.crypt-blowfish">CRYPT_BLOWFISH</a></code></strong>-Algorithmus hat
        zur Folge, dass der Parameter <code class="parameter">string</code> auf eine
        Länge von maximal 72 Bytes gekürzt wird.
       </p>
      </div>
     </dd>
    
    
     <dt><code class="parameter">salt</code></dt>
     <dd>
      <p class="para">
       Ein Salt-String, der die Schlüsselbasis bildet. Falls dieser
       nicht angegeben wird, hängt das Verhalten von der Implementierung des
       Algorithmus ab und kann daher zu unerwarteten Ergebnissen führen. (Wenn
       beispielsweise ein Server MD5 unterstützt und der andere nur DES, dann
       würden beide unterschiedliche Rückgabewerte produzieren, obwohl die
       Zeichenkette eigentlich gleich ist.)
      </p>
     </dd>
    
   </dl>
  </p>
 </div>


 <div class="refsect1 returnvalues" id="refsect1-function.crypt-returnvalues">
  <h3 class="title">Rückgabewerte</h3>
  <p class="para">
   Gibt die gehashte Zeichenkette zurück oder im Fehlerfall eine Zeichenkette,
   die kürzer ist als 13 Zeichen und sich garantiert vom Salt unterscheidet.
  </p>
  <div class="warning"><strong class="warning">Warnung</strong>
   <p class="simpara">
    Wenn Passwörter überprüft werden, sollte eine
    Zeichenkettenvergleichsfunktion verwendet werden, die nicht anfällig für
    Rechenzeitangriffe ist, um die Ausgabe von <span class="function"><strong>crypt()</strong></span> mit
    dem zuvor bekannten Hash zu vergleichen. PHP stellt zu diesem Zweck
    <span class="function"><a href="function.hash-equals.php" class="function">hash_equals()</a></span> zur Verfügung.
   </p>
  </div>
 </div>


 <div class="refsect1 changelog" id="refsect1-function.crypt-changelog">
  <h3 class="title">Changelog</h3>
  <table class="doctable informaltable">
   
    <thead>
     <tr>
      <th>Version</th>
      <th>Beschreibung</th>
     </tr>

    </thead>

    <tbody class="tbody">
     <tr>
      <td>8.0.0</td>
      <td>
       <code class="parameter">salt</code> ist nicht mehr optional.
      </td>
     </tr>

    </tbody>
   
  </table>

 </div>


 <div class="refsect1 examples" id="refsect1-function.crypt-examples">
  <h3 class="title">Beispiele</h3>
  <p class="para">
   <div class="example" id="example-1">
    <p><strong>Beispiel #1 <span class="function"><strong>crypt()</strong></span>-Beispiele</strong></p>
    <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$benutzer_eingabe </span><span style="color: #007700">= </span><span style="color: #DD0000">'rasmuslerdorf'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$gehashtes_passwort </span><span style="color: #007700">= </span><span style="color: #DD0000">'$6$rounds=1000000$NJy4rIPjpOaU$0ACEYGg/aKCY3v8O8AfyiO7CTfZQ8/W231Qfh2tRLmfdvFD6XfHk12u6hMr9cYIA4hnpjLNSTRtUwYr9km9Ij/'</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// Prüfen eines vorhandenen crypt()-Hashs auf eine Weise, die mit Nicht-PHP-Software kompatibel ist.<br /></span><span style="color: #007700">if (</span><span style="color: #0000BB">hash_equals</span><span style="color: #007700">(</span><span style="color: #0000BB">$gehashtes_passwort</span><span style="color: #007700">, </span><span style="color: #0000BB">crypt</span><span style="color: #007700">(</span><span style="color: #0000BB">$benutzer_eingabe</span><span style="color: #007700">, </span><span style="color: #0000BB">$gehashtes_passwort</span><span style="color: #007700">))) {<br />   echo </span><span style="color: #DD0000">"Passwort stimmt überein!"</span><span style="color: #007700">;<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
  </p>
 </div>


 <div class="refsect1 notes" id="refsect1-function.crypt-notes">
  <h3 class="title">Anmerkungen</h3>
  <blockquote class="note"><p><strong class="note">Hinweis</strong>: 
   <span class="simpara">
    Es existiert keine decrypt-Funktion, da <span class="function"><strong>crypt()</strong></span>
    ein Einweg-Algorithmus ist.
   </span>
  </p></blockquote>
 </div>


 <div class="refsect1 seealso" id="refsect1-function.crypt-seealso">
  <h3 class="title">Siehe auch</h3>
  <p class="para">
   <ul class="simplelist">
    <li><span class="function"><a href="function.hash-equals.php" class="function" rel="rdfs-seeAlso">hash_equals()</a> - Timing attack safe string comparison</span></li>
    <li><span class="function"><a href="function.password-hash.php" class="function" rel="rdfs-seeAlso">password_hash()</a> - Erstellt einen Passwort-Hash</span></li>
    <li>
     Lesen Sie die Manpages ihres Unix-Systems, wenn Sie weitere Informationen
     zu crypt benötigen.
    </li>
   </ul>
  </p>
 </div>


</div><?php manual_footer($setup); ?>