var crypto = require('crypto') /** * * @param {number} len */ var random = (len = 32) => { var buf = crypto.randomBytes(len) return buf.toString('hex') } /** * * @param {string} str */ var sha256 = (str) => { return crypto.createHash('sha256').update(str).digest('base64') } /** * * @param {string} str */ var genPassHash = (str) => { var hash = random(16) var pass = sha256(str + hash) return `$${hash}$${pass}` } /** * * @param {string} plain * @param {string} hash */ 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 }