首页 > 编程知识 正文

加盐课堂电脑登录,加盐课堂

时间:2023-05-04 15:20:49 阅读:188119 作者:2832

nodejs-md5加盐到解密比对 nodejs-crypto 加密工具crypto 常用的MD5crypto 导入安装MD5 加盐并且去除盐校验用户注册时候 MD5 多次加密登录密码MD5加盐加盐解密

nodejs-crypto 加密工具

crypto 模块提供了加密功能,包括对 OpenSSL 的哈希、MD5、HMAC、加密、解密、签名、以及验证功能的一整套封装。
项目地址

crypto 常用的MD5

MD5 是一种不可逆的加密算法,目前是最牢靠的加密算法之一,尚没有能够逆运算的程序被开发出来,它对应任何字符串都可以加密成一段唯一的固定长度的代码。
首先,它不可逆,没有系统的方法可以知道MD5码原来的文字是什么。
当然MD5也是优缺点的加密相同的字符是结果都是相同的码,会出现撞库的风险。

crypto 导入安装

对于nodejs 环境下

npm i crypto --save-dev//js中引入const crypto = require('crypto');或者import crypto from 'crypto';

封装一下 MD5 utils.js

const crypto = require('crypto');/** * hash方法 * * @param {String} e.g.: 'md5', 'sha1' * @param {String|Buffer} s * @param {String} [format] 'hex','base64'. default is 'hex'. * @return {String} 编码值 * @private */const hash = (method, s, format) => {var sum = crypto.createHash(method);var isBuffer = Buffer.isBuffer(s);if(!isBuffer && typeof s === 'object') {s = JSON.stringify(sortObject(s));}sum.update(s, isBuffer ? 'binary' : 'utf8');return sum.digest(format || 'hex');};/** - md5 编码 - 3. @param {String|Buffer} s - @param {String} [format] 'hex','base64'. default is 'hex'. - @return {String} md5 hash string - @public */const md5 = (s, format) => {return hash('md5', s, format);};module.exports = {md5}; MD5 加盐并且去除盐校验

江湖险恶为了防止撞库的梅超疯招式,我们登录时使用加盐的方式经登陆

用户注册时候 MD5 多次加密

md5(md5(用户名+ md5(密码))
多次加密,越多越好

//引入上述封装的utils.jsimport utils from '../utils.js'let name = 'abcd'let password = '123'let user_ticket = utils.md5(utils.md5(name + utils.md5(password)))console.log(user_ticket) => 3a59492a85438a3a39a30fd0d8103ac5 //加密后的结果 登录密码MD5加盐

加盐的方式采用时间戳的方式,也可以采用其他方式越咸越好,然后在锅中来回翻炒

好了严规正传
同样采用MD5多次加密规格另外在加一 时间戳盐,登录的时候时间戳也要和其他参数一并传入后台,做解密处理

let name = 'abcd'let password = '123'var timestamp = Date.parse(new Date()) / 1000let user_ticket = utils.md5(utils.md5(utils.md5(name + utils.md5(password))) + timestamp)console.log(user_ticket) =>0b3298cb3c20b08318c185aec803a929 //加盐的结果 加盐解密

上述说到注册时采用MD5多次加密保存数据,登录时使用MD5多次加密在加盐

let name = 'abcd'let password = '123'var timestamp = Date.parse(new Date()) / 1000let load_password = utils.md5(utils.md5(name + utils.md5(password))) //储存密码let user_ticket_client = utils.md5(utils.md5(utils.md5(name + utils.md5(password))) + timestamp) //客户端密码let user_ticket_service = utils.md5(load_password + timestamp) //服务端再次加密计算 储存密码加 时间戳console.log(user_ticket_client == user_ticket_service) => true //客户端已经加密和服务端再次加密做对比

有人的地方就有江湖,江湖险恶没有绝对的安全系统,还有各式各样的加密方式,这次带我MD5拯救江湖,江湖有缘再见

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。