Md5 已經公認為危險的加密方式, 而SHA-512也能以每秒4600萬次計算進行破解, 儘管被破解的速度較慢,但是仍有安全上的疑慮。

通常駭客如果取得了大量的加密字串,需要先猜測出你使用的是哪一種SALT, 如果所有的密碼都採用相同的SALT,那麼一但破解第一組,代表其他密碼也就能順而進行破解

現在,PHP提供的 password_hash 可以達到隨機生成處理 SALT, 因此就連開發者也不會知道每次加密會使用甚麼SALT, 這樣當駭客想要進行破解,成本就當然會更高

關於password hash用法介紹如下:

password_hash

(PHP 5 >= 5.5.0, PHP 7)

使用 password hash 可以直接用最簡單的方式實踐複雜的加密 在使用時,需要搭配第二個參數,推薦直接使用 PASSWORD_DEFAULT 每次處理時,都會在背後產生隨機的SALT, 當然,也可以手動指定要使用哪一個SALT,但最好不要,就交給PASSWORD_DEFAULT來隨機處理,會更加安全

<?php
$hash = password_hash('your_password', PASSWORD_DEFAULT);

另外也可以搭配第三個cost參數(默認為10), 當值調整越大,所需耗費的計算時間就會越多,可以自行測試。

<?php
$hash = password_hash('your_password', PASSWORD_DEFAULT, ['cost' => 11]);

password_verify

(PHP 5 >= 5.5.0, PHP 7) 由於前面password hash 使用了PASSWORD_DEFAULT,

因此,無法得知到底使用了哪組SALT,

只能透過password_verify 進行驗證,因此會更加安全

<?php
$hash = 經過password_hash加密過的字串;

if (password_verify('your_password', $hash)) {
    echo 'Password is valid!';
} else {
    echo 'Invalid password.';
}

推薦延伸閱讀 PHP 雜湊加密演算 sha256、sha224、sha512….