我有一个laravel网站,它的所有数据转移到Hybird移动应用程序使用html,css和js。移动应用程序在离线模式下工作。我必须在手机上进行认证,这是基于从网站传输的数据。但是laravel用的是bcrypt散列。如何使类似的hasher匹配javascript中的密码??是否有可能在javascript中制作类似的hasher,或者已经有人这样做了?
发布于 2015-11-12 11:38:11
试图回答您模糊的问题(假设您正在为javascript寻找bcrypt库):
1)这里有一个javascript的bcrypt库:https://github.com/nevins-b/javascript-bcrypt在这里找到:bCrypt implementation in Javascript
我假设(但不确定) laravel使用了php内置的password_hash()和password_verify(),因此输出了一种特殊的格式,其中包含了php中使用过的盐,如下例所示:
$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函数中使用它来验证移动应用程序中用户提供的密码。
更新
salt存储在散列中,因此您可以提取它以进行javascript验证--只需在前缀“$2y 10$”之后取前22个字符(本例中的salt是"saltsaltsaltsaltsaltse“):
echo password_hash('JohnDoe', PASSWORD_DEFAULT, ['salt' => 'saltsaltsaltsaltsaltse']);
# will output $2y$10$saltsaltsaltsaltsaltseQMyqgPkFxQ1hfP2yBcGxgbJZGe1uGXq更新
由于hassans的研究,发现javascript库与来自phps password_hash()的散列兼容,而不分开散列和/或获取盐类。为了避免js中针对php生成的散列的“无效盐修订”错误,必须在哈希前缀中用$2a替换$2y。来自js的散列可以由php使用,而不需要替换。
发布于 2015-11-12 12:07:08
我认为所有身份验证都应该在后端服务器上完成(在本例中使用laravel)。您不应将用户信息传输到客户端移动应用程序进行脱机身份验证。有几个问题可能会出现,机密数据可以暴露,最近注册的用户信息可能不会出现在离线移动应用程序中,等等。
现在,我建议您通过在线身份验证/注册用户,然后在脱机模式下执行其他操作。在6或7天后定期检查身份验证。
但是,如果您仍然需要每个bcrypt算法都会产生相同的散列,那么here是一个应该有所帮助的讨论。
注意事项:Authentication should not be done on client side.
发布于 2015-11-12 15:45:35
我认为你需要做的是调用一个API来执行这个任务。
首先使用请求数据从应用程序调用ajax
(使用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);
}
});在Laravel控制器中(Laravel 5)
public function hashPassword()
{
$hashPassword = bcrypt(Input::get('password'));
return response()->json([
'status' => 'success',
'data' => $hashPassword
]);
}https://stackoverflow.com/questions/33670341
复制相似问题