簡體   English   中英

如何正確解釋散列方案的遞歸偽代碼

[英]How to correctly interpret recursive pseudo code for a hashing scheme

我嘗試按照本文 (默多克的強化無狀態會話Cookie)來實現一種腌制機制。 以下偽代碼描述了代碼:

 a[0](salt, password ) = H(salt||password ) a[x](salt, password ) = H(a[x−1](salt, password )||password ) 

H:密碼安全散列函數
x:哈希迭代計數
a:身份驗證者
salt:Per-account,加密安全偽隨機數約128bit
密碼:用戶pw用明文表示

我想知道php實現是否應該如下:

$a0 = hash('sha256', $salt | $password);
$auth = recursiveHash($a0, $password, 256)

function recursiveHash($salt, $password, $counter) {
    if ($counter === 0) {
        return hash('sha256', $salt | $password);
    } else {
        $counter--;
        return $this->recursiveHash(hash('sha256', $salt | $password), $password, $counter);
    }
}

總的來說:我確實在努力解決確切的句法解釋。 $ varOne,$ varTwo是什么意思? 它是最后一次函數調用的結果嗎? 是|| 按位OR運算符? 為什么不單一? 以下是什么意思:

c = a[n](salt, password )

它是否相同(當n == x時):

a[x](salt, password ) = H(a[x−1](salt, password )||password )

如果有人可以幫助我完成本文的語義和句法解釋,那將非常高興。

所以你有了:

a[0](salt, password) = H(salt || password )  
a[x](salt, password) = H(a[x−1](salt, password) || password)

首先請注意|| 在這種情況下意味着連接。 位操作數在這里沒有意義,因為您不想刪除密碼位。

然后讓我們來看看如果n有值2會發生什么:

a[0](salt, password) = H(salt || password )
a[1](salt, password) = H(a[1−1](salt, password) || password) = H(a[0](salt, password) || password) = H(H(salt || password) || password)
a[2](salt, password) = H(a[1](salt, password) || password) = H(H(H(salt || password) || password) || password)

因此,您可以看到您可以簡單地重用先前的哈希值,將密碼字節添加到它們,然后再次哈希。

通常,您不應該使用遞歸方法。 您不需要回溯,迭代次數n通常很高。 這將意味着遞歸函數的高內存要求,而不必保留中間值。

最后,在代碼中使用salt變量作為中間散列值的輸入。 這是不正確的,只有一個salt ,這是你開始的那個。 此外,您應確保對密碼應用特定的

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM