簡體   English   中英

如何在 PHP 中安全地生成 SSHA256 或 SSHA512 哈希?

[英]How to securely generate SSHA256 or SSHA512 hashes in PHP?

我正在為郵件服務器開發一個 web 管理模塊(如果你想看看它是開源的)。

為此,我需要能夠生成Dovecot可讀的散列密碼。 他們的 wiki 所述,他們推薦的密碼散列方案是 SSHA256(額外的 S 用於鹽漬)。

還解釋說,使用類似 PHP 代碼的代碼可以相當簡單地實現:

$salt = 'generate_a_salt_somehow';
$hash = hash('sha256', $password . $salt);

然而,從我讀過的關於密碼學的內容來看,這是一種生成加鹽哈希的相當幼稚的方法,但如果你在源代碼中輸入 AES時做錯了,我認為在這種情況下也是如此。

因此,如果您對密碼學有深入了解,我很想聽聽最安全的方法,無論是 mcrypt、mhash 還是其他任何方法。

您鏈接到的 Dovecot wiki 頁面解釋了 Dovecot 使用的確切 hash 格式是什么。 在這件事上你別無選擇——Dovecot 對 hash 的外觀有它的期望,所以你必須遵守它的規則:

對於大多數加鹽密碼方案(SMD5、SSHA*),鹽存儲在密碼 hash 之后,其長度可以變化。 對密碼進行哈希處理時,append 是明文密碼后的鹽,例如:SSHA256(pass, salt) = SHA256(pass + salt) + salt。

因此,PHP 中的適當密碼生成 function 可能如下所示:

$hash = "{SSHA256}" . base64_encode(hash('sha256', $password . $salt) . $salt);

PHP 中的密碼生成 function:

$hash = "{SSHA256}".base64_encode(hash('sha256', $password.$salt, true).$salt);

必然是“真”——第三個參數……

暫無
暫無

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

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