资讯专栏INFORMATION COLUMN

nodejs-md5加盐到解密比对

MasonEast / 1892人阅读

摘要:加密工具模块提供了加密功能,包括对的哈希加密解密签名以及验证功能的一整套封装。当然也是优缺点的加密相同的字符是结果都是相同的码,会出现撞库的风险。

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加盐

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

好了严规正传
同样采用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拯救江湖,江湖有缘再见

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/105964.html

相关文章

  • 当我们在谈论前端加密时,我们在谈些什么

    摘要:所以我们今天只谈前端加密,一个部分人认为没有意义的工作。在中,认证过程使用了非对称加密算法,非认证过程中使用了对称加密算法。非对称加密上文中我们讨论了前端的哈希加密以及应用的场景。 showImg(https://segmentfault.com/img/bVAhTC); 当然在谈安全。 前端安全是Web安全的一部分,常见的安全问题会有XSS、CSRF、SQL注入等,然而这些已经在程师...

    wizChen 评论0 收藏0
  • [转]MD5(1)-安全性与原理

    摘要:没错,年的破解就是证明了在碰撞上面不可靠,也就是可以通过某种方式快速的找到具有相同散列值的另一个信息。好,第二个不安全的误区来了上述破解过程对于绝大多数散列函数来说,基本上都是一个道理。 转载请注明出处 http://www.paraller.com 原文排版地址 点击获取更好阅读体验 转载: http://blog.sina.com.cn/s/blog_77e8d1350100w...

    ideaa 评论0 收藏0
  • 给你的密码加盐

    摘要:第三阶段这种方式是在实习中学习到的,也就是对密码来进行加盐。什么是加盐在密码学中,是指通过在密码任意固定位置插入特定的字符串,让散列后的结果和使用原始密码的散列结果不相符,这种过程称之为加盐。 写在前面 本文描述了本人,对于数据库中如何保存密码的认识过程。从最简单的明文保存到密码加盐保存,下面与大家分享下: 第一阶段 最开始接触web开发时,对于用户表的密码基本是明文保存,如: use...

    Y3G 评论0 收藏0
  • 常见https,SSH协议和MD5加密方式分析

    摘要:前言协议和加密是前端可能会接触到的加密所以我就将他们进行了一个归纳原理就是在加入层是安全的基础协议是在基础上加了协议使用端口是端口由网景公司开发并内置在浏览器中作用建立一个信息安全通道来保证数据传输的安全确认网站的真实性可以查看网站认证的真 前言 https,SSH协议和MD5加密是前端可能会接触到的加密,所以我就将他们进行了一个归纳. 1.https 1.1原理 A.就是在http加...

    3fuyu 评论0 收藏0
  • 常见https,SSH协议和MD5加密方式分析

    摘要:前言协议和加密是前端可能会接触到的加密所以我就将他们进行了一个归纳原理就是在加入层是安全的基础协议是在基础上加了协议使用端口是端口由网景公司开发并内置在浏览器中作用建立一个信息安全通道来保证数据传输的安全确认网站的真实性可以查看网站认证的真 前言 https,SSH协议和MD5加密是前端可能会接触到的加密,所以我就将他们进行了一个归纳. 1.https 1.1原理 A.就是在http加...

    Alfred 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<