English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Manuale di base PHP

Manuale avanzato PHP

PHP & MySQL

Manuale di riferimento PHP

Uso e esempio della funzione crypt() in PHP

PHP String 字符串函数手册

La funzione crypt() viene utilizzata per restituire un'hash stringa a senso unico

Sintassi

string crypt ( string $str [, string $salt ] )

Definizione e uso

 crypt() restituisce una stringa di hash basata sull'algoritmo DES standard UNIX o su altri algoritmi disponibili sul sistema.
Il parametro sale è opzionale. Tuttavia, senza sale, crypt() crea una password debole. Le versioni successive a php 5.6 sollevano un errore di livello E_NOTICE in sua assenza. Per una maggiore sicurezza, assicurarsi di specificare una sale sufficientemente forte.
password_hash() utilizza un algoritmo di hash forte per generare una sale sufficientemente forte e esegue automaticamente il numero di iterazioni appropriato. password_hash() è un semplice封装 di crypt() e completamente compatibile con l'hash delle password esistente. Si consiglia di utilizzare password_hash().
Alcuni sistemi supportano più di un tipo di hash. In effetti, a volte, l'algoritmo basato su MD5 viene utilizzato al posto dell'algoritmo basato su DES standard. Questo tipo di hash viene attivato dal parametro di sale. Prima della versione 5.3, PHP decideva l'algoritmo disponibile durante l'installazione in base a crypt() del sistema. Se non viene fornita una sale, PHP genererà automaticamente una sale di 2 caratteri (DES) o 12 caratteri (MD5), a seconda della disponibilità di MD5 crypt(). PHP ha impostato una costante chiamata CRYPT_SALT_LENGTH per rappresentare la lunghezza massima della sale consentita per l'hash disponibile.
La funzione crypt() basata sull'algoritmo DES standard restituisce i primi due caratteri della stringa di sale nella posizione iniziale del contenuto di output. Usa solo i primi 8 caratteri di str, quindi anche le stringhe più lunghe che iniziano con gli stessi 8 caratteri genereranno lo stesso risultato (quando viene utilizzata la stessa sale).
Sul sistema che supporta la funzione crypt() multi-hashing, le costanti elencate di seguito vengono impostate su 0 o 1 in base alla disponibilità del tipo corrispondente:

  • CRYPT_STD_DES - Hash basato sull'algoritmo DES standard che utilizza due caratteri tra "/./0-9A-Za-z" come sale. L'uso di caratteri illegali nella stringa di sale causerebbe il fallimento di crypt().

  • CRYPT_EXT_DES - Hash esteso basato sull'algoritmo DES. La stringa di sale è di 9 caratteri, composta da un trattino seguita da 4 byte di iterazioni cicliche e 4 byte di sale. Questi vengono codificati in caratteri stampabili, ciascuno con 6 bit, con priorità ai bit validi minimi. 0 a 63 vengono codificati come "/./0-9A-Za-z". L'uso di caratteri illegali nella stringa di sale causerebbe il fallimento di crypt().

  • CRYPT_MD5 - L'hash MD5 utilizza una stringa di sale di 12 caratteri che inizia con $1$.

  • CRYPT_BLOWFISH - Blowfish 算法使用如下盐值:“$2a$”,一个两位 cost 参数,“$” 以及 64 位由 “./0-9A-Za-z” 中的字符组合而成的字符串。在盐值中使用此范围之外的字符将导致 crypt() 返回一个空字符串。两位 cost 参数是循环次数以 2 为底的对数,它的范围是 04-31,超出这个范围将导致 crypt() 失败。 PHP 5.3.7 之前只支持 “$2a$” 作为盐值的前缀,PHP 5.3.7 开始引入了新的前缀来修正一个在Blowfish实现上的安全风险。可以参考» this document来了解关于这个修复的更多信息。总而言之,开发者如果仅针对 PHP 5.3.7及之后版本进行开发,那应该使用 “$2y$” 而非 “$2a$”

  • CRYPT_SHA256 - SHA-256 算法使用一个以 $5$ 开头的 16 字符字符串盐值进行散列。如果盐值字符串以 “rounds=<N>$” 开头,N 的数字值将被用来指定散列循环的执行次数,这点很像 Blowfish 算法的 cost 参数。默认的循环次数是 5000,最小是 1000,最大是 999,999,999。超出这个范围的 N 将会被转换为最接近的值。

  • CRYPT_SHA512 - SHA-512 算法使用一个以 $6$ 开头的 16 字符字符串盐值进行散列。如果盐值字符串以 “rounds=<N>$” 开头,N 的数字值将被用来指定散列循环的执行次数,这点很像 Blowfish 算法的 cost 参数。默认的循环次数是 5000,最小是 1000,最大是 999,999,999。超出这个范围的 N 将会被转换为最接近的值。

返回值

它返回哈希字符串

参数

序号参数和说明
1

str

要散列的字符串

在线示例

试试下面的实例,crypt() 函数获取散列值,使用自动加盐:

<?php
      //设置密码
   $input = 'information';  
   
   // 获取散列值,使用自动盐值 
   $hash = crypt($input);
?>
测试看看‹/›

PHP String 字符串函数手册