摘要:加密工具模块提供了加密功能,包括对的哈希加密解密签名以及验证功能的一整套封装。当然也是优缺点的加密相同的字符是结果都是相同的码,会出现撞库的风险。
nodejs-crypto 加密工具
crypto 模块提供了加密功能,包括对 OpenSSL 的哈希、MD5、HMAC、加密、解密、签名、以及验证功能的一整套封装。
crypto 常用的MD5MD5 是一种不可逆的加密算法,目前是最牢靠的加密算法之一,尚没有能够逆运算的程序被开发出来,它对应任何字符串都可以加密成一段唯一的固定长度的代码。
首先,它不可逆,没有系统的方法可以知道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注入等,然而这些已经在程师...
摘要:没错,年的破解就是证明了在碰撞上面不可靠,也就是可以通过某种方式快速的找到具有相同散列值的另一个信息。好,第二个不安全的误区来了上述破解过程对于绝大多数散列函数来说,基本上都是一个道理。 转载请注明出处 http://www.paraller.com 原文排版地址 点击获取更好阅读体验 转载: http://blog.sina.com.cn/s/blog_77e8d1350100w...
摘要:前言协议和加密是前端可能会接触到的加密所以我就将他们进行了一个归纳原理就是在加入层是安全的基础协议是在基础上加了协议使用端口是端口由网景公司开发并内置在浏览器中作用建立一个信息安全通道来保证数据传输的安全确认网站的真实性可以查看网站认证的真 前言 https,SSH协议和MD5加密是前端可能会接触到的加密,所以我就将他们进行了一个归纳. 1.https 1.1原理 A.就是在http加...
摘要:前言协议和加密是前端可能会接触到的加密所以我就将他们进行了一个归纳原理就是在加入层是安全的基础协议是在基础上加了协议使用端口是端口由网景公司开发并内置在浏览器中作用建立一个信息安全通道来保证数据传输的安全确认网站的真实性可以查看网站认证的真 前言 https,SSH协议和MD5加密是前端可能会接触到的加密,所以我就将他们进行了一个归纳. 1.https 1.1原理 A.就是在http加...
阅读 2014·2021-11-08 13:22
阅读 2482·2021-09-04 16:40
阅读 1129·2021-09-03 10:29
阅读 1652·2019-08-30 15:44
阅读 2095·2019-08-30 11:13
阅读 2765·2019-08-29 17:07
阅读 1935·2019-08-29 14:22
阅读 1224·2019-08-26 14:00