PHP crypt()函数的用法讲解


Posted in PHP onFebruary 15, 2019

PHP crypt() 函数

定义和用法

crypt() 函数返回使用 DES、Blowfish 或 MD5 算法加密的字符串。

在不同的操作系统上,该函数的行为不同,某些操作系统支持一种以上的算法类型。在安装时,PHP 会检查什么算法可用以及使用什么算法。

确切的算法依赖于 salt 参数的格式和长度。salt 可以通过增加由一个特定字符串与一个特定的加密方法生成的字符串的数量来使得加密更安全。

这里有一些和 crypt() 函数一起使用的常量。这些常量值是在安装时由 PHP 设置的。

常量:

  • [CRYPT_SALT_LENGTH] - 默认的加密长度。使用标准的 DES 加密,长度为 2
  • [CRYPT_STD_DES] - 标准的基于 DES 加密有 2 个字符的 salt,来自字母表 "./0-9A-Za-z"。在 salt 中使用无效的字符将引发函数失败。
  • [CRYPT_EXT_DES] - 扩展的基于 DES 加密有 9 个字符的 salt,由 1 个下划线,后边跟 4 个字节的迭代次数和 4 个字节的 salt 组成。这些被编码为可打印字符,每个字符 6 位,最低有效字符优先。值 0 到 63 被编码为 "./0-9A-Za-z"。在 salt 中使用无效的字符将引发函数失败。
  • [CRYPT_MD5] - MD5 加密有 12 个字符的 salt,以 $1$ 开始。
  • [CRYPT_BLOWFISH] - Blowfish 加密有一个以 $2a$、$2x$ 或 $2y$ 开始的 salt,一个两位数的 cost 参数 "$",以及来自字母表 "./0-9A-Za-z" 中的 22 个字符。使用字母表以外的字符将引发函数返回一个长度为 0 的字符串。"$" 参数是以 2 为底的基于 Blowfish 散列算法的迭代次数的对数,必须在 04-31 范围内。在该范围以外的值将引发函数失败。
  • [CRYPT_SHA_256] - SHA-256 加密有 16 个字符的 salt,以 $5$ 开始。如果 salt 字符串以 "rounds=$" 开始,N 的数字值用于表示散列循环被执行的次数,这与 Blowfish 中的 cost 参数类似。默认的循环次数是 5000,最小值是 1000,最大值是 999,999,999。任何超出这个范围的 N 的值将会转换成最接近的边界值。
  • [CRYPT_SHA_512] - SHA-512 加密有 16 个字符的 salt,以 $6$ 开始。 如果 salt 字符串以 "rounds=$" 开始,N 的数字值用于表示散列循环被执行的次数,这与 Blowfish 中的 cost 参数类似。默认的循环次数是 5000,最小值是 1000,最大值是 999,999,999。任何超出这个范围的 N 的值将会转换成最接近的边界值。

在该函数支持多种算法的系统上,上面的常量如果支持则设置为 "1",否则设置为 "0"。

注释: 没有相应的解密函数。crypt() 函数使用一种单向算法。

语法

crypt( _str,salt_ )

PHP crypt()函数的用法讲解

PHP crypt()函数的用法讲解

实例 1

<?php $hashed_password = crypt('mypassword'); // 自动生成盐值 /* 你应当使用 crypt()
得到的完整结果作为盐值进行密码校验,以此来避免使用不同散列算法导致的问题。(如上所述,基于标准 DES 算法的密码散列使用 2 字符盐值,但是基于 MD5
算法的散列使用 12 个字符盐值。)*/ if (hash_equals($hashed_password, crypt($user_input,
$hashed_password))) { echo "Password verified!"; } ?>

实例 2

利用 htpasswd 进行 crypt() 加密:

<?php // 设置密码 $password = 'mypassword'; // 获取散列值,使用自动盐值 $hash =
crypt($password); ?>

实例 1

在本实例中,我们以不同散列类型使用:

<?php if (CRYPT_STD_DES == 1) { echo 'Standard DES: ' . crypt('rasmuslerdorf',
'rl') . "\n"; } if (CRYPT_EXT_DES == 1) { echo 'Extended DES: ' .
crypt('rasmuslerdorf', '_J9..rasm') . "\n"; } if (CRYPT_MD5 == 1) { echo 'MD5:
' . crypt('rasmuslerdorf', '$1$rasmusle$') . "\n"; } if (CRYPT_BLOWFISH == 1)
{ echo 'Blowfish: ' . crypt('rasmuslerdorf',
'$2a$07$usesomesillystringforsalt$') . "\n"; } if (CRYPT_SHA256 == 1) { echo
'SHA-256: ' . crypt('rasmuslerdorf',
'$5$rounds=5000$usesomesillystringforsalt$') . "\n"; } if (CRYPT_SHA512 == 1)
{ echo 'SHA-512: ' . crypt('rasmuslerdorf',
'$6$rounds=5000$usesomesillystringforsalt$') . "\n"; } ?>

上面的代码输出如下(取决于操作系统):

Standard DES: rl.3StKT.4T8M
Extended DES: _J9..rasmBYk8r9AiWNc
MD5:          $1$rasmusle$rISCgZzpwk3UhDidwXvin0
Blowfish:     $2a$07$usesomesillystringfore2uDLvp1Ii2e./U9C8sBjqp8I90dH6hi
SHA-256:      $5$rounds=5000$usesomesillystri$KqJWpanXZHKq2BOB43TSaYhEWsQ1Lr5QNyPCDH/Tp.6
SHA-512:      $6$rounds=5000$usesomesillystri$D4IrlXatmP7rx3P3InaxBeoomnAihCKRVQP22JZ6EY47Wc6BkroIuUUBOov1i.S5KPgErtP/EN5mcO.ChWQW21

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。如果你想了解更多相关内容请查看下面相关链接

PHP 相关文章推荐
php生成随机数或者字符串的代码
Sep 05 PHP
php网站来路获取代码(针对搜索引擎)
Jun 08 PHP
PHP5 的对象赋值机制介绍
Aug 02 PHP
php 文件上传类代码
Aug 06 PHP
判断Keep-Alive模式的HTTP请求的结束的实现代码
Aug 06 PHP
php页面缓存ob系列函数介绍
Oct 18 PHP
php读取文件内容的三种可行方法示例介绍
Feb 08 PHP
教你如何用php实现LOL数据远程获取
Jun 10 PHP
php导出CSV抽象类实例
Sep 24 PHP
php基于Fleaphp框架实现cvs数据导入MySQL的方法
Feb 23 PHP
thinkphp3.x连接mysql数据库的方法(具体操作步骤)
May 19 PHP
php7安装mongoDB扩展的方法分析
Aug 02 PHP
phpinfo无法显示的原因及解决办法
Feb 15 #PHP
实例介绍PHP中zip_open()函数用法
Feb 15 #PHP
PHP echo()函数讲解
Feb 15 #PHP
PHP crc32()函数讲解
Feb 14 #PHP
PHP count_chars()函数讲解
Feb 14 #PHP
PHP让网站移动访问更加友好方法
Feb 14 #PHP
PHP的curl函数的用法总结
Feb 14 #PHP
You might like
php+dbfile开发小型留言本
2006/10/09 PHP
创建配置文件 用PHP写出自己的BLOG系统 2
2010/04/12 PHP
PHP+Jquery与ajax相结合实现下拉淡出瀑布流效果【无需插件】
2016/05/06 PHP
Yii框架多语言站点配置方法分析【中文/英文切换站点】
2020/04/07 PHP
jquery封装的对话框简单实现
2013/07/21 Javascript
检测一个函数是否是JavaScript原生函数的小技巧
2015/03/13 Javascript
jQuery结合AJAX之在页面滚动时从服务器加载数据
2015/06/30 Javascript
利用jQuery插件imgAreaSelect实现图片上传裁剪(放大缩小)
2016/12/02 Javascript
axios post提交formdata的实例
2018/03/16 Javascript
Vue props用法详解(小结)
2018/07/03 Javascript
vue 自定义指令自动获取文本框焦点的方法
2018/08/25 Javascript
JS实现十分钟倒计时代码实例
2018/10/18 Javascript
使用Angular Cli如何创建Angular私有库详解
2019/01/30 Javascript
element-ui如何防止重复提交的方法步骤
2019/12/09 Javascript
js将URL网址转为16进制加密与解密函数
2020/03/04 Javascript
jQuery+ajax实现用户登录验证
2020/09/13 jQuery
Python写的一个简单监控系统
2015/06/19 Python
浅谈python中列表、字符串、字典的常用操作
2017/09/19 Python
PyQt5每天必学之切换按钮
2020/08/20 Python
详解Django的model查询操作与查询性能优化
2018/10/16 Python
对python opencv 添加文字 cv2.putText 的各参数介绍
2018/12/05 Python
对pandas处理json数据的方法详解
2019/02/08 Python
详解Python爬取并下载《电影天堂》3千多部电影
2019/04/26 Python
Python Django简单实现session登录注销过程详解
2019/08/06 Python
Python3 Tensorlfow:增加或者减小矩阵维度的实现
2020/05/22 Python
canvas实现图片马赛克的示例代码
2018/03/26 HTML / CSS
Sunglasses Shop瑞典:欧洲领先的太阳镜网上商店
2018/04/22 全球购物
英国女性时尚精品店:THE DRESSING ROOM
2018/05/23 全球购物
意大利婴儿产品网上商店:Mukako
2018/10/14 全球购物
博柏利美国官方网站:Burberry美国
2020/11/19 全球购物
配件采购员岗位职责
2013/12/03 职场文书
高一学生评语大全
2014/04/25 职场文书
公共场所禁烟倡议书
2014/08/30 职场文书
教师聘用意向书
2015/05/11 职场文书
五年级作文之劳动作文
2019/11/12 职场文书
教你怎么用python爬取爱奇艺热门电影
2021/05/20 Python