PHP password_hash() 函数

password_hash() 函数用于创建密码的散列(hash)

PHP 版本要求: PHP 5 >= 5.5.0, PHP 7

语法

string password_hash ( string $password , int $algo [, array $options ] )

password_hash() 使用足够强度的单向散列算法创建密码的散列(hash)。 password_hash() 兼容 crypt()。 所以, crypt() 创建的密码散列也可用于 password_hash()。

当前支持的算法:

  • PASSWORD_DEFAULT - 使用 bcrypt 算法 (PHP 5.5.0 默认)。 注意,该常量会随着 PHP 加入更新更高强度的算法而改变。 所以,使用此常量生成结果的长度将在未来有变化。 因此,数据库里储存结果的列可超过60个字符(最好是255个字符)。
  • PASSWORD_BCRYPT - 使用 CRYPT_BLOWFISH 算法创建散列。 这会产生兼容使用 "$2y$" 的 crypt()。 结果将会是 60 个字符的字符串, 或者在失败时返回 FALSE
  • PASSWORD_ARGON2I - 使用 Argon2 散列算法创建散列

PASSWORD_BCRYPT 支持的选项:

  • salt(string) - 手动提供散列密码的盐值(salt)。这将避免自动生成盐值(salt)。

    省略此值后,password_hash() 会为每个密码散列自动生成随机的盐值。这种操作是有意的模式。

    注意:盐值(salt)选项从 PHP 7.0.0 开始被废弃(deprecated)了。 现在最好选择简单的使用默认产生的盐值。

  • cost (integer) - cost 是 PASSWORD_BCRYPT 算法特有的参数,用于指定哈希计算的迭代次数(复杂度)。其值是一个整数,范围为 4 到 31(默认值为 10)。

    • 例如:cost=10 表示迭代 2^10=1024 次;cost=11 则为 2048 次,以此类推。
    • 原理:cost 的值每增加 1,哈希计算的时间大约会翻倍(因为迭代次数是 2^cost)。
    • 安全性:更高的 cost 意味着破解哈希(如暴力破解、彩虹表攻击)需要更长时间,安全性更高。
    • 性能:更高的 cost 会增加服务器计算耗时,可能影响请求响应速度(尤其是高并发场景)

 

PASSWORD_ARGON2I 支持的选项:

  • memory_cost (integer) - 计算 Argon2 散列时的最大内存(单位:字节 byte)。默认值: PASSWORD_ARGON2_DEFAULT_MEMORY_COST

  • time_cost (integer) - 计算 Argon2 散列时最多的时间。默认值: PASSWORD_ARGON2_DEFAULT_TIME_COST

  • threads (integer) - 计算 Argon2 散列时最多的线程数。默认值: PASSWORD_ARGON2_DEFAULT_THREADS

返回值

返回散列后的密码, 或者在失败时返回 FALSE。

实例 1

<?php
/*** 在这个案例里,我们为 BCRYPT 增加 cost 到 12。* 注意,我们已经切换到了,将始终产生 60 个字符。*/
$options = ['cost' => 12,
];
echo password_hash("rasmuslerdorf", PASSWORD_BCRYPT, $options);
?>

输出结果为:

$2y$10$.vGA1O9wmRjrwAVXD98HNOgsNpDczlqm3Jq7KnEd1rVAGv3Fykk1a

实例 2

<?php
/*** 在这个案例里,我们为 BCRYPT 增加 cost 到 12。* 注意,我们已经切换到了,将始终产生 60 个字符。*/
$options = ['cost' => 12,
];
echo password_hash("rasmuslerdorf", PASSWORD_BCRYPT, $options);
?>

输出结果为:

$2y$12$QjSH496pcT5CEbzjD/vtVeH03tfHKFy36d4J0Ltp3lRtee9HDxY3K

实例 4

寻找最佳 cost 的 password_hash() 例子

<?php
/*** 这个例子对服务器做了基准测试(benchmark),检测服务器能承受多高的 cost* 在不明显拖慢服务器的情况下可以设置最高的值* 8-10 是个不错的底线,在服务器够快的情况下,越高越好。* 以下代码目标为  ≤ 50 毫秒(milliseconds),* 适合系统处理交互登录。*/
$timeTarget = 0.05; // 50 毫秒(milliseconds) $cost = 8;
do {$cost++;$start = microtime(true);password_hash("test", PASSWORD_BCRYPT, ["cost" => $cost]);$end = microtime(true);
} while (($end - $start) < $timeTarget);echo "Appropriate Cost Found: " . $cost;
?>

输出结果为:

Appropriate Cost Found: 10

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/88893.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/88893.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

理解Linux文件系统:从物理存储到统一接口

目录 一、狭义理解&#xff08;物理层面&#xff09; 二、广义理解&#xff08;Linux系统视角&#xff09; 三、文件结构解析 四、系统实现机制 一、狭义理解&#xff08;物理层面&#xff09; 存储特性&#xff1a;文件以二进制形式存储在磁盘等永久性存储介质中 介质特点…

前端接入海康威视摄像头的三种方案

方案选择​方案适用场景优缺点​Web SDK&#xff08;3.0&#xff09;​​需要完整功能&#xff08;PTZ控制、录像回放&#xff09;功能全&#xff0c;但需加载海康JS文件​RTSP转Web播放​低延迟实时监控需后端转码&#xff08;如FFmpeg转HLS&#xff09;​HTTP API​简单截图或…

openGL学习(Shader)

认识Shader在计算机图形学中&#xff0c;Shader&#xff08;着色器&#xff09;是一种运行在 GPU&#xff08;图形处理单元&#xff09;上的程序&#xff0c;用于控制图形渲染过程中顶点和像素的处理。着色器是 OpenGL、Direct3D、Vulkan 等图形 API 的核心组成部分&#xff0c…

webpack高级配置

一、了解webpack高级配置&#xff1a; 1、什么是webpack高级配置&#xff1a; 进行 Webpack 优化&#xff0c;让代码在编译或者运行时性能更好 2、webpack优化从哪些方面入手&#xff1a; ① 提升开发体验&#xff0c;增强开发和生产环境的代码调试&#xff1a; 如果代码编写…

LLM表征工程还有哪些值得做的地方

LLM表征工程还有哪些值得做的地方 在大型语言模型(LLM)的表征工程领域,近年来涌现出多个具有突破性的创新方向,这些方法通过动态调整、多模态融合、结构化记忆增强等技术,显著提升了模型的适应性、可解释性和效率。 一、动态自适应表征:从静态到动态的范式革新 传统LL…

LabVIEW智能避障小车

​LabVIEW结合 NI、德州仪器&#xff08;TI&#xff09;、欧姆龙&#xff08;Omron&#xff09;等硬件&#xff0c;设计实现了一款具备智能避障、循迹功能的轮式机器人。系统支持手动操控与自主运行两种模式&#xff0c;通过无线通信实时传输传感器数据与图像信息&#xff0c;在…

逻辑代数中的基本规则,代入规则和反演规则,对偶规则

本文探讨了代入规则在逻辑等式中的应用&#xff0c;解释了如何通过替换变量来保持等式的正确性&#xff0c;同时介绍了反演规则和对偶规则的概念。代入规则定义:在任何一个包含变量A的逻辑等式中&#xff0c;如果用另一个逻辑式代入式中的所有A位置&#xff0c;则等式依然成立反…

Javaweb使用websocket,请先连上demo好吧!很简单的!

Javaweb使用websocket先看结构及效果MyWebSocketHandler用于处理消息WebSocketConfig用于配置建联地址等SchedulerConfig必须配置这个MyWebSocketInterceptor建联的拦截器SpringBootWebsocketApplication启动类POM依赖展示效果源码先看结构及效果 MyWebSocketHandler用于处理消…

文心大模型4.5开源测评:保姆级部署教程+多维度测试验证

前言&#xff1a;国产大模型开源的破局时刻 2025年6月百度文心大模型4.5系列的开源&#xff0c;标志着国产AI从"技术跟跑"向"生态共建"的关键跨越。 文心大模型4.5是百度自主研发的新一代原生多模态基础大模型&#xff0c;通过多个模态联合建模实现协同优…

前端学习5:Float学习(仅简单了解,引出flex)

一、Float基础概念1. 设计初衷&#xff1a; float最初是为实现文字环绕图片的效果&#xff08;类似杂志排版&#xff09;&#xff0c;后来被开发者用来做页面布局。2. 核心特性&#xff1a;使元素脱离普通文档流&#xff08;但仍在DOM中&#xff09;元素会向左/右浮动&#xff…

08-自然壁纸实战教程-视频列表-云

08-自然壁纸实战教程-视频列表 前言 视频列表页面本质上也是一个数据展示的列表&#xff0c;不同之处在于之前是是展示壁纸&#xff0c;Image组件负责渲染&#xff0c;这里展示的是视频&#xff0c;使用Video组件&#xff0c;另外视频页面也实现了下载的基本功能&#xff0c;…

SCI特刊征稿

我们团队联合北京工业大学研究团队在SCI源刊CMC组织了特刊SI: Advanced Edge Computing and Artificial Intelligence in Smart Environment,主要收录边缘计算和人工智能方向的文章&#xff0c;欢迎领域专家和学者投稿&#xff0c;网址https://www.techscience.com/cmc/special…

DO,VO,DTO.....

在 Java 项目里&#xff08;尤其是 Spring、MyBatis 这类框架&#xff09;&#xff0c;经常会看到一堆以 O 结尾的类&#xff1a;VO、DO、DTO、BO、POJO……它们本质上都是普通的 Java Bean&#xff08;即 POJO&#xff09;&#xff0c;但职责和出现的位置不同。下面用“用户下…

数据结构之并查集和LRUCache

系列文章目录 数据结构之ArrayList_arraylist o(1) o(n)-CSDN博客 数据结构之LinkedList-CSDN博客 数据结构之栈_栈有什么方法-CSDN博客 数据结构之队列-CSDN博客 数据结构之二叉树-CSDN博客 数据结构之优先级队列-CSDN博客 常见的排序方法-CSDN博客 数据结构之Map和Se…

UE5多人MOBA+GAS 21、给升龙添加连段攻击,从角色的按下事件中传递事件给GA

文章目录给升龙制作可连段缓存下一连段用普攻键来触发升龙后续的连段在角色中发送按下普攻标签事件在升龙中接收按下事件&#xff0c;触发连段以及伤害和力量的传递最后在蓝图中设置一下升龙技能的完整代码给升龙制作可连段 给升龙技能添加一些连段 缓存下一连段 缓存下一连…

基于光栅传感器+FPGA+ARM的测量控制解决方案

基于光栅传感器结合FPGA与ARM的测量控制解决方案&#xff0c;通过硬件协同分工实现高精度、实时性及多场景适应性&#xff1a;⚙️ ‌一、系统架构分工‌‌传感层&#xff08;光栅传感器&#xff09;‌采用光栅尺输出正交脉冲信号&#xff0c;分辨率达0.5μm&#xff0c;精度1μ…

NW831NW910美光固态闪存NW887NW888

美光固态闪存深度解析&#xff1a;NW831、NW910、NW887、NW888系列全方位评测一、技术根基与架构创新美光NW系列固态闪存的技术突破源于其先进的G9 NAND架构&#xff0c;该架构采用5纳米制程工艺和多层3D堆叠技术&#xff0c;在单位面积内实现了高达256层的存储单元堆叠&#x…

reasense api 文档

API 架构 英特尔实感&#xff08;Intel RealSense™&#xff09;API 提供对深度摄像头流数据的配置、控制和访问功能。该 API 支持通过高层级 API 快速启用摄像头基础功能&#xff0c;或通过底层级 API 全面控制所有摄像头设置。请根据需求选择合适的 API&#xff1a; 高层级 P…

ArkTs实现骰子布局

Entry Component struct workA {// 定义6种颜色数组&#xff0c;使用ResourceColor类型确保颜色值合法性State color: ResourceColor[] [#ef2816, #f0a200, #6ab002, #005868, #41192e, #141411]// 定义公共样式装饰器&#xff0c;避免重复样式代码Stylesys() {// 白色圆形基础…

c语言内存函数以及数据在内存中的存储

代码见&#xff1a;登录 - Gitee.com 1. memcpy使用和模拟实现 strcpy&#xff0c;strncpy是拷贝字符串的&#xff0c;有局限性 函数原型&#xff1a; void * memcpy ( void * destination, const void * source, size_t num ); 功能&#xff1a; memcpy 是完成内存块拷⻉的…