| 类别 | 函数/算法 | 可逆性 | 典型用途 |
|---|---|---|---|
| 单向哈希 | MD5、SHA1、SHA256/512 | 不可逆 | 完整性校验、非核心密码存储 |
| 加盐哈希 | crypt()、password_hash() | 不可逆 | 密码存储首选 |
| 编码/可逆 | Base64、urlencode | 可逆 | 数据传输、URL 参数 |
<?php $pwd = '123456'; echo md5($pwd); // e10adc3949ba59abbe56e057f20f883e ?>
md5($str, true) 返回 16 字节二进制<?php
$pwd = '123456';
echo crypt($pwd, 'te'); // teMGKvBPcptKo (标准 DES,仅前 2 字符盐)
echo crypt($pwd); // 自动生成盐值(推荐)
// 验证示例
$hash = crypt('mypassword');
if (crypt('mypassword', $hash) === $hash) { echo '验证通过'; }
?>
算法识别由盐值前缀决定:
$1$ → MD5(12 字符盐)$2a$ / $2y$ → Blowfish(cost 参数 04-31)$5$ → SHA-256(16 字符盐,可指定 rounds)$6$ → SHA-512(同 SHA-256)常量 CRYPT_BLOWFISH 等指示系统支持情况。
<?php
echo sha1('123456'); // 7c4a8d09ca3762af61e59520943dc26494f8941b
?>
40 位十六进制,sha1($str, true) 返回 20 字节二进制。
MD5/SHA1/crypt(DES) 均可被 在线反查库 破解。防御核心:
md5(md5($pwd).$salt) 仍不安全)<?php $url = 'https://www.xxx.com/CraryPrimitiveMan/'; $enc = urlencode($url); // http%3A%2F%2Fwww.xxx.com%2FCraryPrimitiveMan%2F echo urldecode($enc); // 还原 ?>
+(非 RFC 3986 标准)<?php $str = 'CraryPrimitiveMan'; $enc = base64_encode($str); // Q3JhcnlQcmltaXRpdmVNYW4= echo base64_decode($enc); // 还原 ?>
内置 Bcrypt(默认)/ Argon2(PHP 7.2+),自动处理盐值、cost、算法标识,**零配置最安全**。
<?php
// 注册/修改密码
$hash = password_hash('my super cool password', PASSWORD_DEFAULT);
// 存入数据库:$hash 形如 $2y$10$usesomesillystringfore2uDLvp1Ii2e./U9C8sBjqp8I90dH6hi
// 登录验证
if (password_verify('user input', $hash)) { /* 成功 */ }
?>
旧项目兼容:若无 password_hash,引入 password_compat 或 phpass 库(文中示例)。
md5($pwd) / sha1($pwd) 存密码password_hash() + password_verify()password_needs_rehash() 检测)