[英]How to make Laravel Password hash using Javascript
我有一個laravel網站,該網站使用html css和js將其所有數據傳輸到Hybird移動應用程序。 行動應用程式可在離線模式下運作。 我必須在基於網站傳輸的數據的移動設備上執行身份驗證。 但是laravel使用bcrypt哈希。 我如何才能使類似的哈希器與javascript中的密碼匹配? 是否有可能在javascript中創建類似的哈希器,或者有人已經這樣做了?
嘗試回答您的模糊問題(假設您正在尋找JavaScript的bcrypt庫):
1)在這里有一個用於JavaScript的bcrypt庫: https : //github.com/nevins-b/javascript-bcrypt在這里找到: Java中的bCrypt實現
我會假設(但不確定)laravel使用php內置的password_hash()
和password_verify()
,從而輸出一種特殊格式,其中包含用過的鹽,例如來自php doc的示例:
$hash = '$2y$07$BCryptRequires22Chrcte/VlQH0piJtjXl.0t1XkA8pw9dMXTpOq';
您可以查看兩者的php文檔: https : //secure.php.net/manual/en/function.password-verify.php https://secure.php.net/manual/en/function.password-hash .php文件
您需要調整哈希字符串,以便可以在javascript bcrypt函數中使用它來驗證移動應用程序中用戶提供的密碼。
更新資料
鹽存儲在哈希中,因此您可以提取它以進行JavaScript驗證-只需在前綴“ $ 2y $ 10 $” 后加上前22個字符(在此示例中,鹽為“ saltsaltsaltsaltsaltse”):
echo password_hash('JohnDoe', PASSWORD_DEFAULT, ['salt' => 'saltsaltsaltsaltsaltse']);
# will output $2y$10$saltsaltsaltsaltsaltseQMyqgPkFxQ1hfP2yBcGxgbJZGe1uGXq
更新
由於hassans研究,JavaScript庫被發現是從散列兼容phps
password_hash()
不分割的散列和/或單獨的prividing鹽。 為了避免js lib中php生成的哈希產生“無效的鹽修訂”錯誤,必須將$2y
替換$2y
哈希前綴中的$2a
。 js庫中的哈希可以由php使用,而無需替換。
我認為所有身份驗證都應該在后端服務器上完成(在這種情況下,使用laravel)。 您不應將用戶信息傳輸到客戶端移動應用程序以進行脫機身份驗證。 可能會出現一些問題,可能會泄露機密數據,脫機移動應用程序上可能不會出現最近注冊的用戶信息,等等。
現在,我建議您通過在線身份驗證/注冊用戶,然后在離線模式下執行其他操作。 6或7天后定期檢查身份驗證。
但是,如果仍然需要每種bcrypt算法都應產生相同的哈希值,那么這里的討論應該會有所幫助。
注意 : Authentication should not be done on client side.
我認為您需要做的是對bucrypt進行API調用。
例如(使用jQuery):
var stringToHash = 'mypassword';
$.ajax({
type: "GET",
data:{password:stringToHash },
success: function(response){
console.log('here you get response');
/*now the hash code*/
console.log(response.data);
}
});
public function hashPassword()
{
$hashPassword = bcrypt(Input::get('password'));
return response()->json([
'status' => 'success',
'data' => $hashPassword
]);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.