PBKDF2 演算法概述

2021-07-15 22:35:53 字數 1122 閱讀 3866

pbkdf2(password-based key derivation function)是乙個用來匯出金鑰的函式,常用於生成加密的密碼。

它的基本原理是通過乙個偽隨機函式(例如hmac函式),把明文和乙個鹽值作為輸入引數,然後重複進行運算,並最終產生金鑰。

如果重複的次數足夠大,破解的成本就會變得很高。而鹽值的新增也會增加「彩虹表」攻擊的難度。

dk =pbkdf2(prf, password, salt, c, dklen)

prf是乙個偽隨機函式,例如hash_hmac函式,它會輸出長度為hlen的結果。

password是用來生成金鑰的原文密碼。

salt是乙個加密用的鹽值。

c是進行重複計算的次數。

dklen是期望得到的金鑰的長度。

dk是最後產生的金鑰。

dk的值由乙個以上的block拼接而成。block的數量是dklen/hlen的值。就是說如果prf輸出的結果比期望得到的金鑰長度要短,則要通過拼接多個結果以滿足金鑰的長度:

dk = t1 || t2 || ... || tdklen/hlen
而每個block則通過則通過函式f得到:

ti =f(password, salt, c, i)
在函式f裡,prf會進行c次的運算,然後把得到的結果進行異或運算,得到最終的值。

f(password, salt, c, i) = u1 ^ u2 ^ ... ^ uc
第一次,prf會使用password作為key,salt拼接上編碼成大字節序的32位整型的i作為鹽值進行運算。

u1 =prf(password, salt || int_32_be(i))
而後續的c-1次則會使用上次得到的結果作為鹽值。

u2 = prf(password, u1)

...uc = prf(password, uc-1)

函式f大致的流程圖如下:

2 演算法概述

參考 大話資料結構 程杰 演算法是解決特定問題求解步驟的描述,在計算機中表現為指令的有限序列,而且每條指令表示乙個或多個操作,資料結構與演算法是相輔相成的關係。演算法是解決問題的方法,演算法 algorithm 是解決特定問題求解步驟的描述,在計算機中表現為指令的有限序列,而且每條指令表示乙個或多個...

遺忘演算法 演算法概述

一 遺忘演算法原理 能夠從未知的事物中發現關聯 提煉規律才是真正智慧型的標誌,而遺忘正是使用智慧型生物具備這一能力的工具,也是適應變化的利器,遺忘 這一頗具負能量特徵的傢伙是如何實現發現這麼個神奇魔法的呢?讓我們從巴甫洛夫的狗說起 狗聽到了鈴聲就知道開飯了。鈴聲和開飯之間並不存在必然的聯絡,我們知道...

常見演算法 概述

一 演算法概述 演算法是對特定問題求解步驟的一種描述,它是指令的有限序列,其中每一條指令表示乙個或多個操作。此外,乙個演算法還具有5個重要特性 有窮性 確定性 可行性 輸入 輸出。二 演算法設計 通常求解乙個問題可能會有多種演算法可供選擇,選擇的主要標準首先是演算法的正確性和可靠性 簡單性和易理解性...