Node.js密码加密

使用crypto库对密码进行加密

加密过程使用了node.js原生库cryptonode

  • utils/crypto.js
const crypto = require('crypto')

// 密匙
const SECRET_KEY = 'WJiol_8776#' // 密匙是自定的,但须要保存好

// md5 加密
function md5(content) {
    let md5 = crypto.createHash('md5')
    return md5.update(content).digest('hex') // 把输出编程16进制的格式
}

// 加密函数
function genPassword(password) {
    const str = `password=${password}&key=${SECRET_KEY}` // 拼接方式是自定的,只要包含密匙便可
    return md5(str)
}

module.exports = {
    genPassword
}
复制代码

注册时将加密后的密码存到数据库中

注册新用户时使用上面utils/crypto.js中的genPassword方法对密码进行加密,而后存到数据库中。 存储完成后,数据库中user表的格式和下面类似: mysql

登录验证

用户登录时,将用户输入的密码加密后和数据库中已加密的密码进行比对,一致则代表用户输入的密码正确。sql

const { exec, escape } = require('../db/mysql')
const { genPassword } = require('../utils/cryp')

const login = (username, password) => {
    // In order to avoid SQL Injection attacks, you should always escape
    // any user provided data before using it inside a SQL query. 
    // 避免SQL语句注入攻击,原理是插入一些特殊字符,让攻击片断失效
    // You can do so using the mysql.escape(), 
    username = escape(username)
    
    // 生成加密密码
    password = genPassword(password)
    password = escape(password)

    const sql = ` select username, realname from users where username=${username} and password=${password} `
    // console.log('sql is', sql)
    return exec(sql).then(rows => {
        return rows[0] || {}
    })
}

module.exports = {
    login
}
复制代码
相关文章
相关标签/搜索