<?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 => 'it',
  ),
  'this' => 
  array (
    0 => 'function.crypt.php',
    1 => 'crypt',
    2 => 'Criptazione di una stringa a senso unico (hashing)',
  ),
  'up' => 
  array (
    0 => 'ref.strings.php',
    1 => 'String Funzioni',
  ),
  'prev' => 
  array (
    0 => 'function.crc32.php',
    1 => 'crc32',
  ),
  'next' => 
  array (
    0 => 'function.echo.php',
    1 => 'echo',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'it',
    '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">Criptazione di una stringa a senso unico (hashing)</span></p>

   </div>
   <div class="refsect1 unknown-1273" id="refsect1-function.crypt-unknown-1273">
    <h3 class="title">Descrizione</h3>
     <div class="methodsynopsis dc-description">
      <span class="methodname"><strong>crypt</strong></span>(<span class="methodparam"><span class="type"><a href="language.types.string.php" class="type string">string</a></span> <code class="parameter">$str</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 class="initializer"> = ?</span></span>): <span class="type"><a href="language.types.string.php" class="type string">string</a></span></div>

    <p class="para rdfs-comment">
     La funzione <span class="function"><strong>crypt()</strong></span> restituisce una stringa criptata tramite
     l&#039;algoritmo standard di crittografia di UNIX basato sul <abbr class="abbrev">DES</abbr>
     o su algoritmo alternativi disponibili sul sistema. I parametri sono
     la stringa che deve essere crittografata, e un parametro opzionale da usarsi come
     base per la crittografia. Vedere le pagine Unix relative alla funzione cript
     per maggiori dettagli.
    </p>
    <p class="simpara">
     Se il parametro salt non viene fornito, il PHP ne genererà
     uno casuale ad ogni chiamata.
    </p>
    <p class="simpara">
     Alcuni sistemi operativi supportano più di un tipo di cifratura. Infatti
     in alcuni casi lo standard basato sul DES viene sostituito da un algoritmo
     basato su MD5. Il tipo di crittografia da utilizzare viene attivato tramite il parametro
     salt. Al momento dell&#039;installazione il PHP cerca di determinare le caratteristiche
     della funzione crypt e accetterà salt per altri tipi di funzioni.
     Se il parametro salt non viene passato, il PHP genererà, per default, una chiave di due caratteri
     a meno che il sistema di cifratura di default del sistema non sia MD5, in questo caso
     si genererà una chiave casuale compatibile con MD5. Il PHP imposta 
     una costante chiamata CRYPT_SALT_LENGTH dalla quale si può sapere se sul sistema
     si può utilizzare una chiave di due caratteri o la chiave più lunga di 
     12 caratteri.
    </p>
    <p class="simpara">
     Se si usa la chiave generata, bisogna fare attenzione che questa
     viene generata una sola volta. Se si chiama la funzione ricorsivamente, si possono
     avere dei problemi di formato e di sicurezza.
    </p>
    <p class="simpara">
     La crittografia basa sullo standard DES restituisce la chiave come
     primi due caratteri dell&#039;output. Inoltre utilizza solo i primi 8 caratteri
     del parametro <code class="parameter">str</code>, pertanto stringhe più lunghe
     che inizino con i medesimi otto caratteri, creeranno il medesimo risultato
     (se si utilizza la medesima chiave).
    </p>
    <p class="simpara">
     Sui sistemi nei quali la funzione cript() supporta più tipi
     di crittografia, si imposteranno le seguenti costanti a 0 o a 1
     in base al tipo disponibile.
    </p>
    <ul class="itemizedlist">
     <li class="listitem">
      <span class="simpara">
       CRYPT_STD_DES - Standard basato su DES con chiave di due caratteri
      </span>
     </li>
     <li class="listitem">
      <span class="simpara">
       CRYPT_EXT_DES - Estensione basato su DES con chiave di nove caratteri
      </span>
     </li>
     <li class="listitem">
      <span class="simpara">
       CRYPT_MD5 - Crittografia basata su MD5 con 12 caratteri di chiave inizianti con
       $1$
      </span>
     </li>
     <li class="listitem">
      <span class="simpara">
       CRYPT_BLOWFISH - Crittografia Blowfish con 16 caratteri di chiave
       inizianti con $2$ oppure $2a$
      </span>
     </li>
    </ul>
    <blockquote class="note"><p><strong class="note">Nota</strong>: 
     <span class="simpara">
      Non esiste una funzione di decriptazione, poiché <span class="function"><strong>crypt()</strong></span>
      è un algoritmo ad una via.
     </span>
    </p></blockquote>
    <div class="example" id="example-1">
     <p><strong>Example #1 Esempio di uso di <span class="function"><strong>crypt()</strong></span></strong></p>
     <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$password </span><span style="color: #007700">= </span><span style="color: #0000BB">crypt</span><span style="color: #007700">(</span><span style="color: #DD0000">"My1sTpassword"</span><span style="color: #007700">); </span><span style="color: #FF8000">// let salt be generated<br /><br />/* Si dovrebbe passare l'intero risultato di crypt() come chiave di confronto<br />   della password per evitare problemi con differenti algoritmi di hash. (Come detto prima<br />   lo standard basato su DES usa chiavi di 2 caratteri,<br />   mentre lo standard basato su MD5 ne usa 12). */<br /></span><span style="color: #007700">if (</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">$password</span><span style="color: #007700">) == </span><span style="color: #0000BB">$password</span><span style="color: #007700">) {<br />   echo </span><span style="color: #DD0000">"Password verified!"</span><span style="color: #007700">;<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
    <div class="example" id="example-2">
     <p><strong>Example #2 Utilizzo di <span class="function"><strong>crypt()</strong></span> con htpasswd</strong></p>
     <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">// Set the password<br /></span><span style="color: #0000BB">$password </span><span style="color: #007700">= </span><span style="color: #DD0000">'mypassword'</span><span style="color: #007700">;<br /> <br /></span><span style="color: #FF8000">// Get the hash, letting the salt be automatically generated<br /></span><span style="color: #0000BB">$hash </span><span style="color: #007700">= </span><span style="color: #0000BB">crypt</span><span style="color: #007700">(</span><span style="color: #0000BB">$password</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
    <div class="example" id="example-3">
     <p><strong>Example #3 Uso dei diversi tipi di criptazione</strong></p>
     <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">if (</span><span style="color: #0000BB">CRYPT_STD_DES </span><span style="color: #007700">== </span><span style="color: #0000BB">1</span><span style="color: #007700">) {<br />    echo </span><span style="color: #DD0000">'Standard DES: ' </span><span style="color: #007700">. </span><span style="color: #0000BB">crypt</span><span style="color: #007700">(</span><span style="color: #DD0000">'rasmuslerdorf'</span><span style="color: #007700">, </span><span style="color: #DD0000">'rl'</span><span style="color: #007700">) . </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br />}<br /> <br />if (</span><span style="color: #0000BB">CRYPT_EXT_DES </span><span style="color: #007700">== </span><span style="color: #0000BB">1</span><span style="color: #007700">) {<br />    echo </span><span style="color: #DD0000">'Extended DES: ' </span><span style="color: #007700">. </span><span style="color: #0000BB">crypt</span><span style="color: #007700">(</span><span style="color: #DD0000">'rasmuslerdorf'</span><span style="color: #007700">, </span><span style="color: #DD0000">'_J9..rasm'</span><span style="color: #007700">) . </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br />}<br /> <br />if (</span><span style="color: #0000BB">CRYPT_MD5 </span><span style="color: #007700">== </span><span style="color: #0000BB">1</span><span style="color: #007700">) {<br />    echo </span><span style="color: #DD0000">'MD5:          ' </span><span style="color: #007700">. </span><span style="color: #0000BB">crypt</span><span style="color: #007700">(</span><span style="color: #DD0000">'rasmuslerdorf'</span><span style="color: #007700">, </span><span style="color: #DD0000">'$1$rasmusle$'</span><span style="color: #007700">) . </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br />}<br /> <br />if (</span><span style="color: #0000BB">CRYPT_BLOWFISH </span><span style="color: #007700">== </span><span style="color: #0000BB">1</span><span style="color: #007700">) {<br />    echo </span><span style="color: #DD0000">'Blowfish:     ' </span><span style="color: #007700">. </span><span style="color: #0000BB">crypt</span><span style="color: #007700">(</span><span style="color: #DD0000">'rasmuslerdorf'</span><span style="color: #007700">, </span><span style="color: #DD0000">'$2a$07$rasmuslerd...........$'</span><span style="color: #007700">) . </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

      <div class="example-contents"><p>Il precedente esempio visualizzerà
qualcosa simile a:</p></div>
     <div class="example-contents screen">
<div class="annotation-interactive cdata"><pre>
Standard DES: rl.3StKT.4T8M
Extended DES: _J9..rasmBYk8r9AiWNc
MD5:          $1$rasmusle$rISCgZzpwk3UhDidwXvin0
Blowfish:     $2a$07$rasmuslerd............nIdrcHdxcUxWomQX9j6kvERCFjTg7Ra
</pre></div>
     </div>
    </div>
    <p class="simpara">
     Vedere anche <span class="function"><a href="function.md5.php" class="function">md5()</a></span> e <a href="ref.mcrypt.php" class="link">il 
     modulo Mcrypt</a>.
    </p>
   </div>

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