var crypto = require('crypto'); var random = (len = 32) => { var buf = crypto.randomBytes(len); return buf.toString("hex"); } var sha256 = (str) => { return crypto.createHash("sha256").update(str).digest('base64'); } var genPassHash = (str) => { var hash = random(16); var pass = sha256(str + hash); return `$${hash}$${pass}`; } var comparePass = (plain, hash) => { var match = hash.match(/^\$(.+?)\$(.+)$/); if (match == null || match.length < 3 || !match[1] || !match[2]) return false; var pass = sha256(plain + match[1]); if (pass == match[2]) return true; return false; } module.exports = { random, sha256, genPassHash, comparePass }