md5
- 1、安装crypto
npm install crypto --save //crypto 模块提供了加密功能, //包括对 OpenSSL 的哈希、MD5、HMAC、加密、解密、签名、以及验证功能的一整套封装
- 2、在页面中引入 crypto
svar crypto = require("crypto");
- 3、加密
var md5 = crypto.createHash('md5') let passwordMd5 = md5.update('password').digest('hex')
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rrbN2ywb-1627986362468)(attachment:5ca8d16b755c59ec357693996ebd9683)]
hash加密
const crypto = require('crypto');
const hash = crypto.createHash('md5');
// 如果要计算SHA1,只需要把'md5'改成'sha1',就可以得到SHA1的结果1f32b9c9932c02227819a4151feed43e131aca40。
// 还可以使用更安全的sha256和sha512。
// 可任意多次调用update():
hash.update('Hello, world!');
hash.update('Hello, nodejs!');
// update()方法默认字符串编码为UTF-8,也可以传入Buffer。
console.log(hash.digest('hex')); // 7e1977739c748beac0c0fd14fd26a544
// hash加密无法多次加密 md5可以 使用了digest后就不能再使用了
注: hash算法(md5也是hash算法一种)没办法解密 只能通过数据库的数据进行md5加密后与需要的数据比较来验证
hash加密后再加盐
加盐加密
let name = 'abcd'
let password = '123'
// Date.parse() 方法解析一个表示某个日期的字符串,并返回从1970-1-1 00:00:00 UTC 到该日期对象(该日期对象的UTC时间)的毫秒数,
// 如果该字符串无法识别,或者一些情况下,包含了不合法的日期数值(如:2015-02-31),则返回值为NaN。
var timestamp = Date.parse(new Date()) / 1000
var md5 = crypto.createHash('md5')
let passwordMd5 = md5.update('password').digest('hex')
let user_ticket = md5.update(passwordMd5 + timestamp).digest('hex')
console.log(user_ticket) //加盐的结果
hash加密可以由一个字符串得到一串加密密钥,但是由一串加密密钥可以得到很多个对应的字符串,所以是无法解密的
Cookie加密函数(NODE.JS)
自用的各个加密函数
-
MD5加密
var crypto = require('crypto'); // node.js的md5加密模块 // MD5加密函数 function md5Encryption(req, res, Str, cookieName, maxAgeSeconds, isSigned) { var md5 = crypto.createHash('md5') // 对Str进行加密 let strMd5 = md5.update(Str).digest('hex') // 发送cookie if(isSigned) { res.cookie(cookieName, strMd5, {maxAge: maxAgeSeconds, signed: true}) // 第一次设置的话值为undefined 第二次才能获取到值 // console.log('req.signedCookies.cookieName', req.signedCookies[cookieName]); } else { res.cookie(cookieName, strMd5, {maxAge: maxAgeSeconds}) // console.log('req.cookies.cookieName', req.cookies[cookieName]); } // 返回加密的字符串 return strMd5 }
-
cookie加密函数
function cookieEncryption(req, res, cookieName, cookieValue, maxAgeSeconds, isSigned) { if(isSigned) { res.cookie(cookieName, cookieValue, {maxAge: maxAgeSeconds, signed: true}) return req.signedCookies[cookieName] } else { res.cookie(cookieName, cookieValue, {maxAge: maxAgeSeconds}) return req.cookies[cookieName] } }
-
hash加盐函数
// hash加盐函数 function hashSalt(req, res, cookieName, str, maxAgeSeconds, isSigned) { var strSalt // 如果未设置Cookie // 创建hash对象 var hash = crypto.createHash('sha512') // 密码 let password = str // 当前时间的毫秒数 // Date.parse() 方法解析一个表示某个日期的字符串,并返回从1970-1-1 00:00:00 UTC 到该日期对象(该日期对象的UTC时间)的毫秒数, // 如果该字符串无法识别,或者一些情况下,包含了不合法的日期数值(如:2015-02-31),则返回值为NaN。 let data = Date.parse(new Date()); // 对密码和时间戳hash加密 strSalt = hash.update(password + data).digest('hex') // 发送包含加密字符串的Cookie if(isSigned) { res.cookie(cookieName, strSalt, {maxAge: maxAgeSeconds, signed:true}) // Cookie解密后的Cookie字符串 // console.log('req', req.signedCookies[cookieName]); } else { res.cookie(cookieName, strSalt, {maxAge: maxAgeSeconds}) // console.log('req', req.cookies[cookieName]); } // 返回加密字符串 return strSalt }
-
整体代码
var crypto = require('crypto'); // node.js的md5加密模块 // MD5加密函数 function md5Encryption(req, res, Str, cookieName, maxAgeSeconds, isSigned) { var md5 = crypto.createHash('md5') // 对Str进行加密 let strMd5 = md5.update(Str).digest('hex') // 发送cookie if(isSigned) { res.cookie(cookieName, strMd5, {maxAge: maxAgeSeconds, signed: true}) // 第一次设置的话值为undefined 第二次才能获取到值 // console.log('req.signedCookies.cookieName', req.signedCookies[cookieName]); } else { res.cookie(cookieName, strMd5, {maxAge: maxAgeSeconds}) // console.log('req.cookies.cookieName', req.cookies[cookieName]); } // 返回加密的字符串 return strMd5 } // Cookie验证函数 function CheckCookie(req, str, cookieName, isSigned) { if(isSigned == true) { if(req.signedCookies[cookieName] == undefined) { return undefined } if(str == req.signedCookies[cookieName]) { return true } else { return false } } else { if(req.cookies[cookieName] == undefined) { return undefined } if(str == req.cookies[cookieName]) { return true } else { return false } } } // cookie加密函数 function cookieEncryption(req, res, cookieName, cookieValue, maxAgeSeconds, isSigned) { if(isSigned) { res.cookie(cookieName, cookieValue, {maxAge: maxAgeSeconds, signed: true}) return req.signedCookies[cookieName] } else { res.cookie(cookieName, cookieValue, {maxAge: maxAgeSeconds}) return req.cookies[cookieName] } } // hash加盐函数 function hashSalt(req, res, cookieName, str, maxAgeSeconds, isSigned) { var strSalt // 如果未设置Cookie // 创建hash对象 var hash = crypto.createHash('sha512') // 密码 let password = str // 当前时间的毫秒数 // Date.parse() 方法解析一个表示某个日期的字符串,并返回从1970-1-1 00:00:00 UTC 到该日期对象(该日期对象的UTC时间)的毫秒数, // 如果该字符串无法识别,或者一些情况下,包含了不合法的日期数值(如:2015-02-31),则返回值为NaN。 let data = Date.parse(new Date()); // 对密码和时间戳hash加密 strSalt = hash.update(password + data).digest('hex') // 发送包含加密字符串的Cookie if(isSigned) { res.cookie(cookieName, strSalt, {maxAge: maxAgeSeconds, signed:true}) // Cookie解密后的Cookie字符串 // console.log('req', req.signedCookies[cookieName]); } else { res.cookie(cookieName, strSalt, {maxAge: maxAgeSeconds}) // console.log('req', req.cookies[cookieName]); } // 返回加密字符串 return strSalt } module.exports = { md5Encryption, CheckCookie, cookieEncryption, hashSalt };
实验案例代码(实验时写在了express框架中的user.js)
var express = require('express');
var router = express.Router();
// node.js的md5加密模块
var crypto = require('crypto');
const { serialize } = require('cheerio/lib/api/forms');
const encryptionFunc = require('./加密')
var count = 1
var str4
router.get('/', function(req, res, next) {
// md5加密
// var str = encryptionFunc.md5Encryption(req, res,'123', 'user', '600000', true)
// console.log(encryptionFunc.CheckCookie(req, str, 'user', true));
// console.log("str", str);
// cookie加密
// var str2 = encryptionFunc.cookieEncryption(req, res, 'cookieName', 'cookieValue', 60000, true)
// console.log("str2", str2);
// console.log(encryptionFunc.CheckCookie(req, str2, 'cookieName', true));
// hash加盐加密
// count确保只执行一次
if(count == 1) {
str4 = encryptionFunc.hashSalt(req, res, 'cookie1', 'value1', 60000, true)
}
console.log('str4', str4);
console.log('req.signedCookies.cookie1', req.signedCookies.cookie1);
console.log(encryptionFunc.CheckCookie(req, str4, 'cookie1', true));
count++
res.send('respond with a resource');
});
module.exports = router;
app.js中代码配置
app.use(cookieParser('hw'));