mirror of
https://github.com/php/doc-de.git
synced 2026-03-24 15:22:14 +01:00
270 lines
9.4 KiB
XML
270 lines
9.4 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<!-- $Revision$ -->
|
|
<!-- EN-Revision: d76a7fe17dd2488e47d664a8ab38e161b13ac843 Maintainer: sammywg Status: ready -->
|
|
<refentry xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://docbook.org/ns/docbook" xml:id="function.crypt">
|
|
<refnamediv>
|
|
<refname>crypt</refname>
|
|
<refpurpose>Einweg-String-Hashing</refpurpose>
|
|
</refnamediv>
|
|
|
|
<refsynopsisdiv>
|
|
¬e.not-bin-safe;
|
|
</refsynopsisdiv>
|
|
|
|
<refsect1 role="description">
|
|
&reftitle.description;
|
|
<methodsynopsis>
|
|
<type>string</type><methodname>crypt</methodname>
|
|
<methodparam><modifier role="attribute">#[\SensitiveParameter]</modifier><type>string</type><parameter>string</parameter></methodparam>
|
|
<methodparam><type>string</type><parameter>salt</parameter></methodparam>
|
|
</methodsynopsis>
|
|
<para>
|
|
<function>crypt</function> gibt einen Hash-String zurück, der unter
|
|
Verwendung des <abbrev>DES</abbrev>-basierten
|
|
Unix-Standard-Hashingalgorithmus oder eines anderen Algorithmus erstellt
|
|
wurde. <function>password_verify</function> ist kompatibel zu
|
|
<function>crypt</function>. Daher können Passwort-Hashes, die mit
|
|
<function>crypt</function> erzeugt wurden, mit
|
|
<function>password_verify</function> verwendet werden.
|
|
</para>
|
|
<para>
|
|
Vor PHP 8.0.0 war der Parameter <parameter>salt</parameter> optional.
|
|
Allerdings erzeugt <function>crypt</function> ohne das
|
|
<parameter>salt</parameter> einen schwachen Hash und einen
|
|
<constant>E_NOTICE</constant>-Fehler. Es ist darauf zu achten, ein
|
|
ausreichend starkes Salt für bessere Sicherheit anzugeben.
|
|
</para>
|
|
<para>
|
|
<function>password_hash</function> verwendet einen starken Hash, erzeugt
|
|
ein starkes Salt und wendet automatisch eine angemessene Anzahl von Runden
|
|
an. <function>password_hash</function> ist ein einfacher
|
|
<function>crypt</function>-Wrapper und kompatibel zu bestehenden
|
|
Passwort-Hashes. Die Verwendung von <function>password_hash</function> wird
|
|
empfohlen.
|
|
</para>
|
|
<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
|
|
<constant>CRYPT_SALT_LENGTH</constant>, welche die Länge des längsten von
|
|
den Algorithmen unterstützten Salts enthält.
|
|
</para>
|
|
<para>
|
|
Der Standard-DES-Algorithmus gibt den Salt als erste 2 Zeichen zurück.
|
|
Weiterhin werden nur die ersten acht Zeichen von
|
|
<parameter>string</parameter> 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).
|
|
</para>
|
|
<simpara>
|
|
Die folgenden Hash-Typen werden unterstützt.
|
|
</simpara>
|
|
<itemizedlist>
|
|
<listitem>
|
|
<simpara>
|
|
<constant>CRYPT_STD_DES</constant> - Standard DES-Hash mit einem
|
|
2-Zeichen-Salt aus dem Alphabet "./0-9A-Za-z". Bei Nutzung eines
|
|
ungültigen Zeichens schlägt <function>crypt</function> fehl.
|
|
</simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara>
|
|
<constant>CRYPT_EXT_DES</constant> - 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 <literal>0</literal> bis <literal>63</literal> werden
|
|
als <literal>./0-9A-Za-z</literal> kodiert. Bei Nutzung eines ungültigen
|
|
Zeichens schlägt <function>crypt</function> fehl.
|
|
</simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara>
|
|
<constant>CRYPT_MD5</constant> - MD5-Hashing mit 12-Zeichen-Salt,
|
|
beginnend mit "$1$"
|
|
</simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara>
|
|
<constant>CRYPT_BLOWFISH</constant> - Blowfish-Hash mit einem Salt
|
|
folgenden Aufbaus: "$2a$", "$2x$" oder "$2y$", gefolgt von einem
|
|
zweistelligen Kostenparameter, einem weiteren "$" und 22 Zeichen des
|
|
Alphabets "./0-9A-Za-z". 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. "$2x$"-Hashes sind potenziell schwach; "$2a$"-Hashes sind
|
|
kompatibel und entschärfen diese Schwäche. Für neue Hashes sollte "$2y$"
|
|
verwendet werden.
|
|
</simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara>
|
|
<constant>CRYPT_SHA256</constant> - SHA-256-Hash mit einem
|
|
16-Zeichen-Salt, beginnend mit "$5$". Wenn anschließend
|
|
"rounds=<N>$" 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.
|
|
</simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara>
|
|
<constant>CRYPT_SHA512</constant> - SHA-512-Hash mit einem
|
|
16-Zeichen-Salt, beginnend mit "$6$". Wenn anschließend
|
|
"rounds=<N>$" 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.
|
|
</simpara>
|
|
</listitem>
|
|
</itemizedlist>
|
|
</refsect1>
|
|
|
|
<refsect1 role="parameters">
|
|
&reftitle.parameters;
|
|
<para>
|
|
<variablelist>
|
|
<varlistentry>
|
|
<term><parameter>string</parameter></term>
|
|
<listitem>
|
|
<para>
|
|
Die zu hashende Zeichenkette.
|
|
</para>
|
|
<caution>
|
|
<para>
|
|
Die Verwendung des <constant>CRYPT_BLOWFISH</constant>-Algorithmus hat
|
|
zur Folge, dass der Parameter <parameter>string</parameter> auf eine
|
|
Länge von maximal 72 Bytes gekürzt wird.
|
|
</para>
|
|
</caution>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry>
|
|
<term><parameter>salt</parameter></term>
|
|
<listitem>
|
|
<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.)
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
</variablelist>
|
|
</para>
|
|
</refsect1>
|
|
|
|
<refsect1 role="returnvalues">
|
|
&reftitle.returnvalues;
|
|
<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.
|
|
</para>
|
|
<warning>
|
|
<simpara>
|
|
Wenn Passwörter überprüft werden, sollte eine
|
|
Zeichenkettenvergleichsfunktion verwendet werden, die nicht anfällig für
|
|
Rechenzeitangriffe ist, um die Ausgabe von <function>crypt</function> mit
|
|
dem zuvor bekannten Hash zu vergleichen. PHP stellt zu diesem Zweck
|
|
<function>hash_equals</function> zur Verfügung.
|
|
</simpara>
|
|
</warning>
|
|
</refsect1>
|
|
|
|
<refsect1 role="changelog">
|
|
&reftitle.changelog;
|
|
<informaltable>
|
|
<tgroup cols="2">
|
|
<thead>
|
|
<row>
|
|
<entry>&Version;</entry>
|
|
<entry>&Description;</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>8.0.0</entry>
|
|
<entry>
|
|
<parameter>salt</parameter> ist nicht mehr optional.
|
|
</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</refsect1>
|
|
|
|
<refsect1 role="examples">
|
|
&reftitle.examples;
|
|
<para>
|
|
<example>
|
|
<title><function>crypt</function>-Beispiele</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
$benutzer_eingabe = 'rasmuslerdorf';
|
|
$gehashtes_passwort = '$6$rounds=1000000$NJy4rIPjpOaU$0ACEYGg/aKCY3v8O8AfyiO7CTfZQ8/W231Qfh2tRLmfdvFD6XfHk12u6hMr9cYIA4hnpjLNSTRtUwYr9km9Ij/';
|
|
|
|
// Prüfen eines vorhandenen crypt()-Hashs auf eine Weise, die mit Nicht-PHP-Software kompatibel ist.
|
|
if (hash_equals($gehashtes_passwort, crypt($benutzer_eingabe, $gehashtes_passwort))) {
|
|
echo "Passwort stimmt überein!";
|
|
}
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
</para>
|
|
</refsect1>
|
|
|
|
<refsect1 role="notes">
|
|
&reftitle.notes;
|
|
<note>
|
|
<simpara>
|
|
Es existiert keine decrypt-Funktion, da <function>crypt</function>
|
|
ein Einweg-Algorithmus ist.
|
|
</simpara>
|
|
</note>
|
|
</refsect1>
|
|
|
|
<refsect1 role="seealso">
|
|
&reftitle.seealso;
|
|
<para>
|
|
<simplelist>
|
|
<member><function>hash_equals</function></member>
|
|
<member><function>password_hash</function></member>
|
|
<member>
|
|
Lesen Sie die Manpages ihres Unix-Systems, wenn Sie weitere Informationen
|
|
zu crypt benötigen.
|
|
</member>
|
|
</simplelist>
|
|
</para>
|
|
</refsect1>
|
|
|
|
</refentry>
|
|
<!-- Keep this comment at the end of the file
|
|
Local variables:
|
|
mode: sgml
|
|
sgml-omittag:t
|
|
sgml-shorttag:t
|
|
sgml-minimize-attributes:nil
|
|
sgml-always-quote-attributes:t
|
|
sgml-indent-step:1
|
|
sgml-indent-data:t
|
|
indent-tabs-mode:nil
|
|
sgml-parent-document:nil
|
|
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
|
|
sgml-exposed-tags:nil
|
|
sgml-local-catalogs:nil
|
|
sgml-local-ecat-files:nil
|
|
End:
|
|
vim600: syn=xml fen fdm=syntax fdl=2 si
|
|
vim: et tw=78 syn=sgml
|
|
vi: ts=1 sw=1
|
|
-->
|