[英]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.