2016-08-11 41 views
0

我正在使用pbkdf2算法來散列密碼。 爲evey密碼生成隨機鹽,爲了使計算持續約1秒,迭代次數設置爲 。取消密碼與pbkdf2散列

我還節省了鹽和散列在sambe緩衝:

----------------------- 
    | SaltLen |  4  | 
    ----------------------- 
    | Salt | saltBytes | 
    ----------------------- 
    | HashLen |  4  | 
    ----------------------- 
    | Salt | hashBytes | 
    - --------------------- 

我的問題是,這個哈希密碼未鏈接到一個用戶(用戶可以擁有多個密碼),我需要有可能只使用密碼本身來取消密碼。 我看到的唯一方法是散列密碼,以取消數據庫中的每一個鹽,直到找到相同的散列,這將永遠(每鹽1秒)。

有沒有更好的方法來做到這一點?

+0

_「取消密碼」_是什麼意思? – 1615903

+0

在這種情況下,密碼是許可證,我想將其標記爲已取消 – mba7

+0

您需要某種標識符才能首先查找該行。例如一個從1,2,3開始的64位整數。如果需要,您可以將它附加到密碼的開頭,但它將以非哈希形式。 – SilverlightFox

回答

0

處理像密碼這樣的許可證沒有任何意義。

PBKDF2 &迭代只對客戶端的檢查有意義。在服務器端,他們只允許在服務器上執行DOS攻擊。無論如何,在服務器上,您可以簡單地爲每個請求添加1秒的延遲。

您不必散列它們,因爲只有數據庫中的許可證被認爲是有效的。侵入你的服務器並竊取它們沒有任何意義。

要檢查正確的許可證條目,您只需將許可證的數據庫條目ID預先添加到許可證本身,並且您確切知道要檢查的條目。

+0

但我能做什麼,如果我想生成許可證,將被髮送到客戶誰有3個月來激活它們。如果有人侵入我的網站,他可以獲得他可以使用的有效許可證,而不是真正的客戶端。 – mba7

+0

您在問題中提出的數據庫只有在軟件直接與服務器聯繫以驗證許可證時纔有意義。它的設計是不同的你的問題給了一個錯誤的印象。如果您需要脫機驗證許可證,請使用非對稱加密技術並簽署許可證,許可證名稱和失效日期。 – Robert