Django check_password原理

check_password 是 Django 提供的一個用于密碼校驗的函數,它的工作原理是基于密碼哈希算法的特性。

Django 的 make_password 函數在生成密碼哈希時,會使用一個隨機的 salt(鹽值)。這個 salt 會與密碼一起進行哈希運算,生成最終的哈希值。由于 salt 是隨機的,因此即使輸入相同的密碼,生成的哈希值也會不同。

?為什么 check_password 可以正確校驗密碼?

1. 密碼存儲的原理

在 Django 中,密碼通常是以哈希值的形式存儲在數據庫中的,而不是明文存儲。哈希是一種單向加密算法,它可以將任意長度的輸入(如密碼)轉換為固定長度的輸出(哈希值)。哈希算法的特點是:

  • 不可逆性:無法從哈希值反推出原始密碼。

  • 唯一性:不同的輸入幾乎不可能生成相同的哈希值。

  • 隨機性:即使輸入相同,每次生成的哈希值也可能不同(因為使用了隨機的 salt)。

Django 使用?make_password?函數對密碼進行哈希處理。例如:

from django.contrib.auth.hashers import make_password# 對密碼進行哈希處理
hashed_password = make_password('qwe123')
print(hashed_password)

?結果類似下面的

生成的哈希值包含以下部分:

  • 算法名稱(如?pbkdf2_sha256:用于標識使用的哈希算法。

  • 迭代次數(如?600000:用于增加哈希計算的復雜度。

  • Salt(鹽值,如 8GwcoEyP0yk48cG89Emm8w):一個隨機字符串,用于增加哈希的唯一性。

  • 哈希值(如 XsogYGIVzWCEvUuJwIMuYMNGt5wFyyiEpi+vh1kz39g=):密碼和 salt 經過哈希算法計算后的結果。

2. 密碼校驗的原理

當用戶登錄時,輸入的密碼需要與數據庫中存儲的哈希密碼進行比對。由于哈希是不可逆的,我們不能直接解密哈希值來獲取原始密碼。因此,Django 使用?check_password?函數來完成密碼校驗。

check_password?的工作原理如下:

  1. 提取 Salt:從數據庫中存儲的哈希密碼中提取出 salt。

  2. 重新計算哈希值:將用戶輸入的密碼與提取的 salt 結合,使用相同的哈希算法和迭代次數重新計算哈希值。

  3. 比對哈希值:將重新計算的哈希值與數據庫中存儲的哈希值進行比對。如果兩者一致,說明用戶輸入的密碼是正確的。

例如

from django.contrib.auth.hashers import check_password# 用戶輸入的密碼
input_password = 'qwe123'# 數據庫中存儲的哈希密碼
stored_hashed_password = 'pbkdf2_sha256$600000$uRejMsolXFgxqvVJk5543w$XsogYGIVzWCEvUuJwIMuYMNGt5wFyyiEpi+vh1kz39g='# 校驗密碼
is_valid = check_password(input_password, stored_hashed_password)
print(is_valid)  # 如果密碼正確,返回 True;否則返回 False

哈希算法的確定性:只要輸入(密碼 + salt)和算法參數(如迭代次數)相同,哈希算法的輸出就是確定的。因此,check_password 可以通過重新計算哈希值來驗證密碼的正確性。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/70638.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/70638.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/70638.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Vulnhun靶機-kioptix level 4-sql注入萬能密碼拿到權限ssh連接利用mysql-udf漏洞提權

目錄 一、環境搭建信息收集掃描ip掃描開放端口掃描版本服務信息指紋探測目錄掃描 二、Web滲透sql注入 三、提權UDF提權修改權限 一、環境搭建 然后選擇靶機所在文件夾 信息收集 本靶機ip和攻擊機ip 攻擊機:192.168.108.130 靶機:192.168.108.141 掃描…

PHP 會話(Session)實現用戶登陸功能

Cookie是一種在客戶端和服務器之間傳遞數據的機制。它是由服務器發送給客戶端的小型文本文件,保存在客戶端的瀏覽器中。每當瀏覽器向同一服務器發送請求時,它會自動將相關的Cookie信息包含在請求中,以便服務器可以使用這些信息來提供個性化的…

PAT 甲級 1090 Highest Price in Supply Chain

構造一個二維數組 v &#xff0c;v[i] 存放指向 i 的所有元素。 構造隊列 q 存放每個待讀取的節點。 構造數組 high 存放每個節點的高度&#xff08;第幾級經銷商&#xff09; #include<iostream> #include<queue> #include<cmath> using namespace std; …

DeepSeek掘金——SpringBoot 調用 DeepSeek API 快速實現應用開發

Spring Boot 實現 DeepSeek API 調用 1. 項目依賴 在 pom.xml 中添加以下依賴: <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-webflux</artifactId></dependency>&l…

算法——數學建模的十大常用算法

數學建模的十大常用算法在數學建模競賽和實際問題解決中起著至關重要的作用。以下是這些算法的具體信息、應用場景以及部分算法的C語言代碼示例&#xff08;由于篇幅限制&#xff0c;這里只給出部分算法的簡要代碼或思路&#xff0c;實際應用中可能需要根據具體問題進行調整和擴…

推薦幾款SpringBoot項目手腳架

作為程序員、一般需要搭建項目手腳架時、都會去Gitee或Github上去找、但是由于Github在國內并不穩定、所以就只能去Gitee去上查找。 不同語言檢索方式不一樣、但是也類似。 Gitee WEB應用開發 / 后臺管理框架 芋道源碼 ELADMIN 后臺管理系統 一個基于 Spring Boot 2.7.1…

智能自動化新紀元:AI與UiPath RPA的協同應用場景與技術實踐

智能自動化新紀元&#xff1a;AI與UiPath RPA的協同應用場景與技術實踐 引言 在數字化轉型的浪潮中&#xff0c;企業對于自動化技術的需求已從簡單的任務執行轉向更復雜的智能決策。傳統RPA&#xff08;Robotic Process Automation&#xff09;通過模擬人類操作處理重復性任務…

數據結構:動態數組vector

vector 是 C 標準庫的動態數組。 在C語言中一般初學者會使用malloc&#xff0c;int[n]等方式來創建靜態數組&#xff0c;但是這種方式繁瑣且容易出錯。我們做算法題一般使用動態數組vector&#xff0c; 并且在刷題網站的題目給的輸入一般也是vector類型。 示例&#xff1a;vect…

基于深度學習的信號濾波:創新技術與應用挑戰

一、引言 1.1 研究背景 隨著科技的不斷發展&#xff0c;信號處理領域面臨著越來越復雜的挑戰。在眾多信號處理技術中&#xff0c;基于深度學習的信號濾波技術逐漸嶄露頭角&#xff0c;成為研究的熱點。 基于深度學習的信號濾波在信號處理領域具有至關重要的地位。如今&#…

前端八股——JS+ES6

前端八股&#xff1a;JSES6 說明&#xff1a;個人總結&#xff0c;用于個人復習回顧&#xff0c;將持續改正創作&#xff0c;已在語雀公開&#xff0c;歡迎評論改正。

醫院安全(不良)事件上報系統源碼,基于Laravel8開發,依托其優雅的語法與強大的擴展能力

醫院安全&#xff08;不良&#xff09;事件上報系統源碼 系統定義&#xff1a; 規范醫院安全&#xff08;不良&#xff09;事件的主動報告&#xff0c;增強風險防范意識&#xff0c;及時發現醫院不良事件和安全隱患&#xff0c;將獲取的醫院安全信息進行分析反饋&#xff0c;…

H3C交換機路由器防火墻FTP/TFTP服務器搭建。

軟件介紹。 3CDaemon 2.0 - Download 3CDaemon 是一款集成了多種網絡服務功能的工具軟件&#xff0c;主要用于網絡管理和文件傳輸&#xff0c;支持TFTP、FTP、Syslog等多種協議&#xff0c;廣泛應用于網絡設備的配置和管理。 1. 主要功能 TFTP服務器&#xff1a;支持TFTP協議…

數據庫連接管理--Java連接數據庫的幾種方式

1.數據庫連接管理 1.1 使用JDBC獲取連接 JDBC是Java標準庫提供的API&#xff0c;用于連接和操作關系型數據庫。它是最基礎、最常用的數據庫連接方式。 步驟&#xff1a; 加載數據庫驅動。建立連接。創建Statement或PreparedStatement對象。執行SQL查詢或更新。處理結果集。關…

如何使用Spring boot框架實現圖書管理系統

使用 Spring Boot 框架實現圖書管理系統可以按照以下步驟進行&#xff0c;涵蓋了從項目搭建、數據庫設計、后端接口開發到前端頁面展示的整個流程。 1. 項目搭建 可以使用 Spring Initializr&#xff08;https://start.spring.io/ &#xff09;來快速創建一個 Spring Boot 項目…

【網絡安全 | 漏洞挖掘】賬戶接管+PII+原漏洞繞過

文章目錄 前言正文前言 本文涉及的所有漏洞測試共耗時約三周,成果如下: 訪問管理面板,成功接管目標列出的3000多家公司。 獲取所有員工的真實指紋、機密文件及個人身份信息(PII)。 繞過KYC認證,成功接管電話號碼。 繞過此前發現的漏洞。 正文 在測試目標時,我發現了一…

深度學習學習筆記(34周)

目錄 摘要 Abstracts 簡介 Hourglass Module&#xff08;Hourglass 模塊&#xff09; 網絡結構 Intermediate Supervision&#xff08;中間監督&#xff09; 訓練過程細節 評測結果 摘要 本周閱讀了《Stacked Hourglass Networks for Human Pose Estimation》&#xf…

JVM類文件結構深度解析:跨平臺基石與字節碼探秘

目錄 一、類文件&#xff1a;Java生態的通用語言 1.1 字節碼的橋梁作用 1.2 類文件核心優勢 二、類文件二進制結構剖析 2.1 整體結構布局 2.2 魔數與版本控制 2.3 常量池&#xff1a;類文件的資源倉庫 2.4 訪問標志位解析 三、核心數據結構詳解 3.1 方法表結構 3.2 …

wps中zotero插件消失,解決每次都需要重新開問題

參考 查看zotero目錄 D:\zotero\integration\word-for-windows 加載項點擊 dotm即可 長期解決 把dom 復制到 C:\Users\89735\AppData\Roaming\kingsoft\office6\templates\wps\zh_CN還是每次都需要重新開的話 重新加載一下

如何設計合理的樹狀結構表:平衡查詢效率與維護效率

樹狀結構廣泛應用于數據建模中&#xff0c;例如 商品分類、組織架構、權限管理 等場景。合理設計樹形結構的數據庫表&#xff0c;能夠有效提升 查詢效率 和 維護效率。本文將探討如何在設計時平衡這兩者&#xff0c;詳細介紹常用的幾種樹狀結構存儲方式及其適用場景。 一、樹狀…

List 接口中的 sort 和 forEach 方法

List 接口中的 sort 和 forEach 方法是 Java 8 引入的兩個非常實用的函數&#xff0c;分別用于 排序 和 遍歷 列表中的元素。以下是它們的詳細介紹和用法&#xff1a; sort 函數 功能 對列表中的元素進行排序。 默認使用自然順序&#xff08;如數字從小到大&#xff0c;字符…