<?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 => 'fr',
  ),
  'this' => 
  array (
    0 => 'function.crypt.php',
    1 => 'crypt',
    2 => 'Hachage &agrave; sens unique (ind&eacute;chiffrable)',
  ),
  'up' => 
  array (
    0 => 'ref.strings.php',
    1 => 'Fonctions sur les cha&icirc;nes de caract&egrave;res',
  ),
  'prev' => 
  array (
    0 => 'function.crc32.php',
    1 => 'crc32',
  ),
  'next' => 
  array (
    0 => 'function.echo.php',
    1 => 'echo',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'fr',
    '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">Hachage à sens unique (indéchiffrable)</span></p>

 </div>
 
 <div id="function.crypt-refsynopsisdiv">
  <div class="warning"><strong class="warning">Avertissement</strong><p class="simpara">
 Cette fonction n&#039;est pas capable de gérer les chaînes binaires !
</p></div>
 </div>
 
 <div class="refsect1 description" id="refsect1-function.crypt-description">
  <h3 class="title">Description</h3>
  <div class="methodsynopsis dc-description">
   <span class="modifier">function</span> <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> retournera une chaîne hachée utilisant l&#039;algorithme
   standard d&#039;Unix basé sur <abbr class="abbrev">DES</abbr>, ou un algorithme alternatif.
   La fonction <span class="function"><a href="function.password-verify.php" class="function">password_verify()</a></span> est compatible avec la fonction
   <span class="function"><strong>crypt()</strong></span>. Ainsi, un mot de passe haché par la fonction
   <span class="function"><strong>crypt()</strong></span> peut être utilisé avec la fonction
   <span class="function"><a href="function.password-verify.php" class="function">password_verify()</a></span>.
  </p>
  <p class="para">
   Antérieur à PHP 8.0.0, le paramètre <code class="parameter">salt</code> était optionnel.
   Cependant, <span class="function"><strong>crypt()</strong></span> crée un hash faible sans le
   <code class="parameter">salt</code>, et lève une erreur <strong><code><a href="errorfunc.constants.php#constant.e-notice">E_NOTICE</a></code></strong>
   sans celui-ci.
   Il faut s&#039;assurer de spécifier un salt assez solide pour une meilleure sécurité.
  </p>
  <p class="para">
   <span class="function"><a href="function.password-hash.php" class="function">password_hash()</a></span> utilise un hash fort, génère
   un salt fort, et applique le tout automatiquement.
   <span class="function"><a href="function.password-hash.php" class="function">password_hash()</a></span> est seulement une enveloppe
   de <span class="function"><strong>crypt()</strong></span> et est compatible avec les mots de
   passe hachés existants. L&#039;utilisation de la fonction
   <span class="function"><a href="function.password-hash.php" class="function">password_hash()</a></span> est fortement encouragée.
  </p>
  <p class="simpara">
   Le type de hash est déclenché par l&#039;argument salt.
   Si aucun salt n&#039;est fourni, PHP génère automatiquement soit un salt standard
   de deux caractères (DES), soit un salt de douze caractères (MD5), selon la
   disponibilité de crypt() MD5. PHP définit une constante appelée
   <strong><code><a href="string.constants.php#constant.crypt-salt-length">CRYPT_SALT_LENGTH</a></code></strong> permettant d&#039;indiquer la longueur
   du salt disponible pour le système de hachage utilisé.
  </p>
  <p class="para">
   <span class="function"><strong>crypt()</strong></span>, lorsqu&#039;elle est utilisée avec
   le chiffrement standard DES, retourne le salt
   dans les deux premiers caractères de la chaîne retournée. Elle
   n&#039;utilise que les 8 premiers caractères de <code class="parameter">string</code>,
   ce qui fait que toutes les chaînes plus longues, qui ont les mêmes
   premiers 8 octets retourneront le même résultat (tant que le
   salt est toujours le même).
  </p>
  <p class="simpara">
   Les types de hash suivants sont supportés :
  </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> : chiffrement DES standard à 2
     caractères depuis la classe de caractères &quot;./0-9A-Za-z&quot;. L&#039;utilisation
     de caractères invalides dans le salt fera échouer la fonction crypt().
    </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> : Hachage DES étendu. Le &quot;salt&quot; sera une
     chaîne de 9 caractères composée d&#039;un underscore, suivi de 4 caractères du compteur d&#039;itération
     puis 4 caractères du &quot;salt&quot;. Chacune de ces chaînes de 4 caractères code 24 bits,
     le caractère le moins significatif en premier. Les valeurs
     de <code class="literal">0</code> à <code class="literal">63</code> seront encodés comme <code class="literal">./0-9A-Za-z</code>.
     L&#039;utilisation de caractères invalides dans le salt fera échouer la fonction crypt().
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <strong><code><a href="string.constants.php#constant.crypt-md5">CRYPT_MD5</a></code></strong> : hachage MD5 à 12 caractères
     commençant par $1$
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <strong><code><a href="string.constants.php#constant.crypt-blowfish">CRYPT_BLOWFISH</a></code></strong> : hachage Blowfish dont le salt est composé
     comme ceci ; &quot;$2a$&quot;, &quot;$2x$&quot; or &quot;$2y$&quot;, un paramètre à 2 chiffres, &quot;$&quot;,
     et 22 caractères depuis l&#039;alphabet &quot;./0-9A-Za-z&quot;. L&#039;utilisation
     de caractères en dehors de cette classe dans le salt fera que la fonction crypt()
     retournera une chaîne vide (de longueur 0). Le paramètre à 2 chiffres est le logarithme
     base-2 du compteur d&#039;itération pour l&#039;algorithme de hachage basé sur Blowfish sous-jacent et
     doit être dans l&#039;intervalle 04-31. De la même façon, lors de l&#039;utilisation d&#039;une valeur en dehors
     de cet intervalle, la fonction crypt() échouera.

     Les hashes &quot;$2x$&quot; sont potentiellement faibles ; les hashes &quot;$2a$&quot; sont
     compatibles et atténuent cette faiblesse. Pour de nouveaux hashes, &quot;$2y$&quot;
     devrait être utilisé.
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <strong><code><a href="string.constants.php#constant.crypt-sha256">CRYPT_SHA256</a></code></strong> - Hachage SHA-256 dont le salt est composé de 16 caractères
     préfixés par $5$. Si le salt commence par &#039;rounds=&lt;N&gt;$&#039;,
     la valeur numérique de N sera utilisée pour indiquer le nombre de fois que la boucle de
     hachage doit être exécutée, un peu comme le paramètre dans l&#039;algorithme Blowfish.
     La valeur par défaut de rounds est de 5000, le minimum pouvant être de
     1000 et le maximum, de 999,999,999. Toute autre sélection de N en dehors de cet intervalle
     sera tronquée à la plus proche des 2 limites.
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <strong><code><a href="string.constants.php#constant.crypt-sha512">CRYPT_SHA512</a></code></strong> - Hachage SHA-512 dont le salt est composé de 16 caractères
     préfixés par $6$. Si le salt commence par &#039;rounds=&lt;N&gt;$&#039;,
     la valeur numérique de N sera utilisée pour indiquer le nombre de fois que la boucle de
     hachage doit être exécutée, un peu comme le paramètre dans l&#039;algorithme Blowfish.
     La valeur par défaut de rounds est de 5000, le minimum pouvant être de
     1000 et le maximum, de 999,999,999. Toute autre sélection de N en dehors de cet intervalle
     sera tronquée à la plus proche des 2 limites.
    </span>
   </li>
  </ul>
 </div>

 
 <div class="refsect1 parameters" id="refsect1-function.crypt-parameters">
  <h3 class="title">Liste de paramètres</h3>
  <p class="para">
   <dl>
    
     <dt><code class="parameter">string</code></dt>
     <dd>
      <p class="para">
       La chaîne à hacher.
      </p>
      <div class="caution"><strong class="caution">Attention</strong>
       <p class="para">
        Lors de l&#039;utilisation de l&#039;algorithme <strong><code><a href="string.constants.php#constant.crypt-blowfish">CRYPT_BLOWFISH</a></code></strong>,
        le résultat du paramètre <code class="parameter">string</code> sera tronqué
        à une longueur maximale de 72 octets.
       </p>
      </div>
     </dd>
    
    
     <dt><code class="parameter">salt</code></dt>
     <dd>
      <p class="para">
       Si l&#039;argument <code class="parameter">salt</code> n&#039;est pas fourni, le comportement
       est défini par l&#039;implémentation de l&#039;algorithme et peut provoquer des
       résultats inattendus.
      </p>
     </dd>
    
   </dl>
  </p>
 </div>

 
 <div class="refsect1 returnvalues" id="refsect1-function.crypt-returnvalues">
  <h3 class="title">Valeurs de retour</h3>
  <p class="para">
   Retourne la chaîne hachée ou une chaîne qui sera inférieure à 13 caractères
   et qui est garantie de différer du salt en cas d&#039;erreur.
  </p>
  <div class="warning"><strong class="warning">Avertissement</strong>
   <p class="simpara">
    Lors de la validation des mots de passe, une fonction de comparaison de
    chaînes qui n&#039;est pas vulnérable aux attaques temporelles doit être utilisée
    pour comparer la sortie de la fonction <span class="function"><strong>crypt()</strong></span> au hash
    précédemment connu.
    PHP fournit <span class="function"><a href="function.hash-equals.php" class="function">hash_equals()</a></span> pour ceci.
   </p>
  </div>
 </div>


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

    </thead>

    <tbody class="tbody">
     <tr>
      <td>8.0.0</td>
      <td>
       Le <code class="parameter">salt</code> n&#039;est plus optionnel.
      </td>
     </tr>

    </tbody>
   
  </table>

 </div>


 <div class="refsect1 examples" id="refsect1-function.crypt-examples">
  <h3 class="title">Exemples</h3>
  <p class="para">
   <div class="example" id="example-1">
    <p><strong>Exemple #1 Exemple avec <span class="function"><strong>crypt()</strong></span></strong></p>
    <div class="example-contents">
<div class="annotation-interactive phpcode"><pre><code style="color: #000000"><span style="color: #0000BB">&lt;?php
$user_input </span><span style="color: #007700">= </span><span style="color: #DD0000">'rasmuslerdorf'</span><span style="color: #007700">;
</span><span style="color: #0000BB">$hashed_password </span><span style="color: #007700">= </span><span style="color: #DD0000">'$6$rounds=1000000$NJy4rIPjpOaU$0ACEYGg/aKCY3v8O8AfyiO7CTfZQ8/W231Qfh2tRLmfdvFD6XfHk12u6hMr9cYIA4hnpjLNSTRtUwYr9km9Ij/'</span><span style="color: #007700">;

</span><span style="color: #FF8000">// Valider un hachage crypt() existant d'une manière qui est compatible avec un logiciel non-PHP
</span><span style="color: #007700">if (</span><span style="color: #0000BB">hash_equals</span><span style="color: #007700">(</span><span style="color: #0000BB">$hashed_password</span><span style="color: #007700">, </span><span style="color: #0000BB">crypt</span><span style="color: #007700">(</span><span style="color: #0000BB">$user_input</span><span style="color: #007700">, </span><span style="color: #0000BB">$hashed_password</span><span style="color: #007700">))) {
   echo </span><span style="color: #DD0000">"Mot de passe correct !"</span><span style="color: #007700">;
}
</span><span style="color: #0000BB">?&gt;</span></code></pre></div>
    </div>

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

 
 <div class="refsect1 notes" id="refsect1-function.crypt-notes">
  <h3 class="title">Notes</h3>
  <blockquote class="note"><p><strong class="note">Note</strong>: 
   <span class="simpara">
    Il n&#039;existe pas de fonction de déchiffrement, car la fonction <span class="function"><strong>crypt()</strong></span>
    utilise un algorithme à un seul sens (injection).
   </span>
  </p></blockquote>
 </div>

 
 <div class="refsect1 seealso" id="refsect1-function.crypt-seealso">
  <h3 class="title">Voir aussi</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> - Comparaison de cha&icirc;nes r&eacute;sistante aux attaques temporelles</span></li>
    <li><span class="function"><a href="function.password-hash.php" class="function" rel="rdfs-seeAlso">password_hash()</a> - Cr&eacute;e une cl&eacute; de hachage pour un mot de passe</span></li>
    <li>La page de manuel Unix de la fonction crypt pour plus d'informations</li>
   </ul>
  </p>
 </div>

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