【发布时间】:2018-05-11 01:57:01
【问题描述】:
似乎无法弄清楚我在这里做错了什么,我无法两次获得相同的哈希值,也无法验证密码,因此规范 2 和 4 都失败了。有没有人在这里看到任何明显的问题导致我两次生成相同的哈希时遇到问题?我正在使用节点 v8.9.1(和 Typescript 2.6.1,我希望这无关紧要)。我试过只使用缓冲区和 base64 字符串(如下),但没有任何效果。
实施:
import { pbkdf2Sync, randomBytes } from 'crypto';
export class Auth {
private iters = 1e1; // TODO: increase later
private keylen = 64;
private digest = 'sha512';
create(password: string) {
const salt = randomBytes(128);
const hash = pbkdf2Sync(password, salt, this.iters, this.keylen, this.digest);
console.log(hash.toString('hex'));
return [salt.toString('base64'), hash.toString('base64'), this.iters].join('::');
}
verify(stored: string, password: string) {
const [salt, hash, iters] = stored.split('::');
const verify = pbkdf2Sync(password, salt, parseInt(iters, 10), this.keylen, this.digest);
console.log(verify.toString('hex'));
return hash === verify.toString('base64');
}
}
规格:
describe('Auth', () => {
const auth = new Auth();
const password = 'test';
it('should hash a password', () => {
const hash = auth.create(password);
expect(hash).to.be.string;
});
it('should verify valid password', () => {
const hash = auth.create(password);
const valid = auth.verify(hash, password);
expect(valid).to.be.true;
});
it('should reject invalid password', () => {
const hash = auth.create(password);
const invalid = auth.verify(hash, 'wrong input');
expect(invalid).to.be.false;
});
});
});
【问题讨论】:
标签: javascript node.js typescript cryptography pbkdf2