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
英文地址,請注明出處:http://en.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 是完成內存塊拷?的…