crypt()

1. 定义

该函数返回一个使用了基于标准UNIX DES算法或其他可用的替代算法生成的散列字符串。

注:

  • 在不同的操作系统中,散列类型可能不同,在PHP安装时会根据系统的crypt()决定可用的算法,PHP也实现了自己的算法实现,并在系统缺失某一算法时使用PHP自己的实现
  • 在支持多重散列的系统中,有以下几个可能的值:
    • CRYPT_STD_DES:基于标准DES算法的散列
      • 盐值:./0-9A-Za-z之间的两个字符
      • 例如:xs
    • CRYPT_EXT_DES:扩展的基于DES算法的散列
      • 盐值:9 个字符的字符串,由 1 个下划线后面跟着 4 字节循环次数和 4 字节盐值组成。0 到 63 被编码为./0-9A-Za-z
      • 例如:_xxxxssss
    • CRYPT_MD5MD5散列
      • 盐值:以$1$开始的长度为 12 字符的字符串
      • 例如:$1$xxxxxxxx$
    • CRYPT_BLOWFISHBlowfish算法
      • 盐值:$2y$为前缀,后跟两个范围为04-31之间的循环次数以2为底数的对数,再跟一个$符号,最后是由./0-9A-Za-z中的字符组合而成的字符串
      • 例如:$2y$07$jisujiaocheng1234567$
    • CRYPT_SHA256SHA-256算法
      • 盐值:以$5$开始的长度为 16 字符的字符串
      • 例如:$5$rounds=5000$usesomesillystri$
    • CRYPT_SHA512SHA-512算法
      • 盐值:以$6$开头的长度为 16 字符的字符串
      • 例如:$6$rounds=5000$usesomesillystri$
  • 该函数是单向加密函数,即不提供解密算法函数

2. 语法

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

3. 参数说明

参数 可选性 数据类型 描述
$str 必需 字符串 需要生成散列值的字符串
$salt 可选,但始终建议使用该参数 字符串 盐值

其中,$salt参数是可选的,但始终建议加上它。如果没有该参数,该函数创造的将是一个弱密码,PHP将抛出一个警告。

4. 示例

<?php

// crypt()
// 使用了基于标准`UNIX DES`算法或其他可用的替代算法生成的散列字符串

$str = '极速教程棒棒哒!';

$salt = 'xs';// 2 位字符
$res = crypt($str, $salt);// CRYPT_STD_DES
var_dump($res);// 输出:string(13) "xsVx3IAytELng"

$salt = '_xxxxssss';// 9位字符
$res = crypt($str, $salt);// CRYPT_EXT_DES
var_dump($res);// 输出:string(20) "_xxxxssssLNUEWf3zDkg"

$salt = '$1$xxxxxxxx$';// 12位字符
$res = crypt($str, $salt);// CRYPT_MD5
var_dump($res);// 输出:string(34) "$1$xxxxxxxx$BkuligaxBw/FNrWfUC9.Z0"

$salt = '$2y$07$jisujiaocheng1234567$';// 28位字符
$res = crypt($str, $salt);// CRYPT_BLOWFISH
var_dump($res);// 输出:string(60) "$2y$07$jisujiaocheng1234567$u0JfMVn3NQGm772PNGIzlddSAZpGsDtu"

$salt = '$5$rounds=5000$usesomesillystri$';// 32位字符
$res = crypt($str, $salt);// CRYPT_SHA256
var_dump($res);// 输出:string(75) "$5$rounds=5000$usesomesillystri$XsZ0/GTEu9ldXNJcosGP7M/NwHEHIfA/YshbhxlSCa/"

$salt = '$6$rounds=5000$usesomesillystri$';// 32位字符
$res = crypt($str, $salt);// CRYPT_SHA512
var_dump($res);// 输出:string(118) "$6$rounds=5000$usesomesillystri$ix9IgHnB.qzQ61P6d6u0m3aT5aSHhyaLWswVEoYxgSJ127gVDJmM6wzq2XpRxDaNzXqlAj0E0UQPaJvgvnyw10"

5. 延展阅读

  • md5():计算指定字符串的md5(RSA 数据安全公司的 MD5 报文算法)散列值