我一直在尋找加密密碼以便與我的面板一起使用的最佳方式,我決定繼續使用BCRYPT,只是由於每次加密的成本以及它一般被認爲是目前最好的一種。PHP的password_hash行爲()
我使用的是雙向鹽,所以每個用戶都有一個獨特的鹽,然後顯然存儲在我的應用程序中的鹽,我注意到一些相當奇怪的行爲..根據PHP文檔,這種行爲是正常的?
總之,這裏是我的代碼使用方法:
$Crypto = new Crypto;
echo $Crypto->encrypt("123456789abcdefghijklm", "StackOverflow_Is_Awesome!"); // First parameter being the "User Salt", second being the password.
// Above outputs $2y$13$123456789abcdefghijkleepFY8JLvsf2YbnWolqQyO3DIzrCeNIu
而現在,加密等級:
<?php
// ASSUMING $this->hashingSalt = HBSNi3y7ruhbVGkhdg83ijdbvghiojkgudL;JP
class Crypto {
private $hashingSalt, $database;
public function __construct($salt)
{
$this->hashingSalt = $salt;
$this->database = new DatabaseFunctions();
}
public function encrypt($salt, $password)
{
$options = array(
'cost' => 13,
'salt' => $salt //22 chars
);
return password_hash($password . $this->hashingSalt, PASSWORD_BCRYPT, $options);
}
}
所以,我關心的是,爲什麼在地球上是此功能只添加鹽在選項中設置輸出字符串的開始?它真的很莫名其妙...因爲這不是我所說的安全,而是將對象擊敗給我。
任何人都可以建議,嘗試和解釋我完全看過去?由於
PHP文件:http://php.net/manual/en/function.password-hash.php
你好,謝謝。首先感謝教育我哈希和加密之間的區別,愚蠢的錯誤。我現在將開始改變!我已經閱讀了這兩個鏈接,並獲得了一些關於哈希和我正在使用的api的有價值的知識,所以我想爲此感謝你。所以,我所做的一切正確,只是胡椒粉沒有什麼區別,對嗎? – 2013-04-08 00:23:49
嗯,我看到你正試圖自己設置鹽。在大多數情況下,你不想這樣做,因爲這是API會爲你做的事情,而且它很容易被「搞砸」。如果你想知道它是如何工作的更好,你可以查看代碼[in PHP](https://github.com/ircmaxell/password_compat)。 – PeeHaa 2013-04-08 00:26:59
謝謝您的回覆,我必須使用該compat-library,因爲我仍在等待主機升級到5.5>。我已經查看了代碼,發現它實際上非常有用,爲什麼我的密碼最初不是由api中的函數驗證的,因爲我在使用password_verify()函數之前對它們進行了哈希處理。感謝您的幫助PeeHaa,看起來我過分複雜的事情是真的,與標準沒有什麼不同!所以,現在我已經設立了所有的鹽業務,排除了中間人......謝謝! :) – 2013-04-08 01:02:32