美文网首页
nodejs-md5加盐到解密比对

nodejs-md5加盐到解密比对

作者: 巧不思 | 来源:发表于2019-07-24 11:07 被阅读0次

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.js
import 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加盐

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


image

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

let name = 'abcd'
let password = '123'
var timestamp = Date.parse(new Date()) / 1000
let 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()) / 1000
let 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拯救江湖,江湖有缘再见

相关文章

  • nodejs-md5加盐到解密比对

    nodejs-crypto 加密工具 crypto 模块提供了加密功能,包括对 OpenSSL 的哈希、MD5、H...

  • nodejs 关于密码加密

    加密分为 直接加密、加盐加密 加盐加密更安全,建议加盐 登录时为输入密码再次同盐值加密比对数据库内的加密密码即可判...

  • laravel密码加密

    Laravel框架中 (1) 辅助方法:'加盐' 加密解密 : (2)门面:Hash加密和验证

  • STAR序列比对(测试支原体污染序列)

    转录组测序发现唯一比对率特别低,进一步将未比对到参考基因组的序列提出来比对到NCBI NT库。发现多数序列比对到了...

  • RNASeq实战练习-hisat2比对与featurecount

    hisat2 构建索引 hisat2 比对 hisat2 比对软件将 reads 比对到参考基因组[https:/...

  • 2020-09-03 Papara 安装

    这个工具可以将短的read比对到已经比对好的长序列比对文件,并且在比对的时候考虑长序列的phylogeny的信息 ...

  • 加盐

    大龙是一名颇有名望的厨师,有点结巴。最近带了一个新徒弟。这天厨房忙的不可开交,大龙让徒弟给锅里加盐,自己则一边给南...

  • 加盐

    美味的牛尾汤 需要加盐 先加盐 还是后加盐 我说 你做 你先加盐 我说应该后加 然而 盐已经融化 取不回 待品尝时...

  • 关于登陆时安全性的猜想

    我之前接触到的App登陆会将密码按照固定的格式加盐做MD5后向服务器发送请求,服务器收到后直接比对数据库中是否有匹...

  • 花生酱

    花生去皮烤熟 搅拌 加盐 加花生油 加盐

网友评论

      本文标题:nodejs-md5加盐到解密比对

      本文链接:https://www.haomeiwen.com/subject/dvgtrctx.html