簡體   English   中英

如何使用PHP為Dovecot生成鹽腌的SHA-512密碼哈希

[英]How to generate a salted SHA-512 password hash for Dovecot with PHP

通過使用PHP為Dovecot創建可工作的鹽腌SHA-512哈希值,我陷入了困境。 創建非加鹽的十六進制格式哈希時,一切正常。 向哈希添加鹽,我不再能夠使用“ doveadm pw”驗證哈希。

這是我的代碼:

    $password       = 'test';
    $salt           = '2fec1ee0940e7c436ef2037e89e4c06ca20b281a90dbb2d6cbd3534aa4ce7e19';

    // Create non-salted hashes
    $hash_hex       = "{SHA512.hex}" . hash('sha512', $password);
    $hash_b64       = "{SHA512.b64}" . base64_encode(hash('sha512', $password));

    // Create salted hashes
    $salted_hash_hex= "{SSHA512.hex}" . hash('sha512', $password . $salt) . $salt;
    $salted_hash_b64= "{SSHA512.b64}" . base64_encode(hash('sha512', $password . $salt) . $salt);

    // Output
    var_dump($hash_hex);
    var_dump($hash_b64);
    var_dump($salted_hash_hex);
    var_dump($salted_hash_b64);

var_dumps()的輸出如下:

string '{SHA512.hex}ee26b0dd4af7e749aa1a8ee3c10ae9923f618980772e473f8819a5d4940e0db27ac185f8a0e1d5f84f88bc887fd67b143732c304cc5fa9ad8e6f57f50028a8ff' (length=140)
string '{SHA512.b64}ZWUyNmIwZGQ0YWY3ZTc0OWFhMWE4ZWUzYzEwYWU5OTIzZjYxODk4MDc3MmU0NzNmODgxOWE1ZDQ5NDBlMGRiMjdhYzE4NWY4YTBlMWQ1Zjg0Zjg4YmM4ODdmZDY3YjE0MzczMmMzMDRjYzVmYTlhZDhlNmY1N2Y1MDAyOGE4ZmY=' (length=184)
string '{SSHA512.hex}4a1e8a61780f449ef6cbc883b5cf57279d32fd004cb7298ddb6f8c46bf246187c03f1bf9447044708767a826e65f977e5c95a490abf8f2c3ca90c7a0ea2b89e82fec1ee0940e7c436ef2037e89e4c06ca20b281a90dbb2d6cbd3534aa4ce7e19' (length=205)
string '{SSHA512.b64}NGExZThhNjE3ODBmNDQ5ZWY2Y2JjODgzYjVjZjU3Mjc5ZDMyZmQwMDRjYjcyOThkZGI2ZjhjNDZiZjI0NjE4N2MwM2YxYmY5NDQ3MDQ0NzA4NzY3YTgyNmU2NWY5NzdlNWM5NWE0OTBhYmY4ZjJjM2NhOTBjN2EwZWEyYjg5ZTgyZmVjMWVlMDk0MGU3YzQzNmVmMjAzN2U4OWU0YzA2Y2EyMGIyODFhOTBkYmIyZDZjYmQzNTM0YWE0Y2U3ZTE5' (length=269)

現在,當我嘗試驗證針對doveadm的哈希時,僅第一個哈希(未以十六進制格式加鹽)可以工作。 第二個錯誤給我關於字符串長度的錯誤(輸入長度​​無效(128而不是64))。 第三和第四個告訴密碼不匹配:

root@jupiter[0][75]:/etc/dovecot# dovecot pw -t {SHA512.hex}ee26b0dd4af7e749aa1a8ee3c10ae9923f618980772e473f8819a5d4940e0db27ac185f8a0e1d5f84f88bc887fd67b143732c304cc5fa9ad8e6f57f50028a8ff -p test
{SHA512.hex}ee26b0dd4af7e749aa1a8ee3c10ae9923f618980772e473f8819a5d4940e0db27ac185f8a0e1d5f84f88bc887fd67b143732c304cc5fa9ad8e6f57f50028a8ff (verified)

root@jupiter[0][0]:/etc/dovecot# dovecot pw -t {SHA512.b64}ZWUyNmIwZGQ0YWY3ZTc0OWFhMWE4ZWUzYzEwYWU5OTIzZjYxODk4MDc3MmU0NzNmODgxOWE1ZDQ5NDBlMGRiMjdhYzE4NWY4YTBlMWQ1Zjg0Zjg4YmM4ODdmZDY3YjE0MzczMmMzMDRjYzVmYTlhZDhlNmY1N2Y1MDAyOGE4ZmY= -p test
doveadm(root): Fatal: reverse decode check failed: Input length isn't valid (128 instead of 64)

root@jupiter[0][75]:/etc/dovecot# dovecot pw -t {SSHA512.hex}4a1e8a61780f449ef6cbc883b5cf57279d32fd004cb7298ddb6f8c46bf246187c03f1bf9447044708767a826e65f977e5c95a490abf8f2c3ca90c7a0ea2b89e82fec1ee0940e7c436ef2037e89e4c06ca20b281a90dbb2d6cbd3534aa4ce7e19 -p test
doveadm(root): Fatal: reverse password verification check failed: Password mismatch

root@jupiter[0][75]:/etc/dovecot# dovecot pw -t {SSHA512.b64}NGExZThhNjE3ODBmNDQ5ZWY2Y2JjODgzYjVjZjU3Mjc5ZDMyZmQwMDRjYjcyOThkZGI2ZjhjNDZiZjI0NjE4N2MwM2YxYmY5NDQ3MDQ0NzA4NzY3YTgyNmU2NWY5NzdlNWM5NWE0OTBhYmY4ZjJjM2NhOTBjN2EwZWEyYjg5ZTgyZmVjMWVlMDk0MGU3YzQzNmVmMjAzN2U4OWU0YzA2Y2EyMGIyODFhOTBkYmIyZDZjYmQzNTM0YWE0Y2U3ZTE5 -p test
doveadm(root): Fatal: reverse password verification check failed: Password mismatch

我試圖通過閱讀幾頁來找出它是如何工作的

並以為我做對了。 但是:不,不;-)

有人能指出我的錯誤嗎?

非常感謝你!

hash('sha512', $password, true)

由於您是base64編碼

暫無
暫無

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

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