我会尽量详细说明,我对Javascript的细节不太满意,所以这可能是一个痛苦的基本问题。
我需要获取用户输入,哈希,然后发布。我目前正在使用麻省理工学院的bCrypt算法,我不必专门使用它,但它必须是客户端。 (顺便说一句,我知道像密码客户端这样的东西并不是一个好主意,我已经在SO上阅读了很多关于这个...但是出于这些目的,这只是一个练习。)
我可以生成salt,所以我从bCrypt.js文件成功调用了该函数,但是我遇到了使用哈希密码的问题。以前我能够获得密码哈希,但是无法在其他任何地方成功引用该变量或发布它。现在我把它搞砸了,甚至无法使哈希工作,它返回undefined(这就是为什么我需要养成使用版本控制的习惯)。
我的代码:
var ROUNDS = 10;
// Function grabs username and password from user's input
//
function submitButton() {
var userInput = document.getElementById('password').value;
var userName = document.getElementById('username').value;
hashPw(userInput, userName);
}
function result(hash) {
console.log('hash in callback is ' + hash);
}
function hashPw(old, name) {
console.log('hashPw called');
console.log('old password= ' + old);
var salt = gensalt(ROUNDS);
hashpw(old, salt, result);
console.log('Salt= ' + salt)
console.log('hashed password=');
}

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Hash</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
<script src="bcrypt.js" type="text/javascript"></script>
</head>
<body>
<form>
<div class="form-group">
<label>Username: </label>
<input type="text" id="username" class="form-control">
</div>
<div class="form-group">
<label for="password">Password: </label>
<input type="text" id="password" class="form-control">
<span></span>
</div>
<button type="button" class="btn btn-primary" onClick="submitButton()">Submit</button>
</form>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
<script src="callHash.js" type="text/javascript"></script>
</body>
</html>
&#13;
我的js:
这里发布的内容相当冗长,但这是我正在使用的bCrypt算法:https://github.com/nevins-b/javascript-bcrypt/blob/master/bCrypt.js
我一致得到的控制台输出示例:
callHash.js:18 hashPw called
callHash.js:19 old password= tryagain
callHash.js:23 Salt= $2a$10$AwGCCKs5bXa1SNzdKLBytO
callHash.js:24 hashed password=undefined
EDIT-- 无论我改变什么,这都是我一遍又一遍的:
bcrypt.js:467 [Violation] 'setTimeout' handler took 102ms
非常感谢您的任何帮助或建议,我确实在寻求指导之前尝试研究这个问题并进行了大量的排查,我已经重复了几次,所以我想我错过了一些东西这里很大很明显。
答案 0 :(得分:0)
我假设您正在使用bcrypt的异步功能。 您可以使用同步功能(genSaltSync和hashSync),也可以阅读有关回调的内容。 我会建议第二个结果如下:
var bcrypt = require('bcryptjs');
bcrypt.genSalt(10, function(err, salt) {
bcrypt.hash("B4c0/\/", salt, function(err, hash) {
// Store hash in your password DB.
});
});
有关详细信息,请查看文档:{{3}}