md5
1、安装cryptonpm install crypto --save
//crypto 模块提供了加密功能,
//包括对 OpenSSL 的哈希、MD5、HMAC、加密、解密、签名、以及验证功能的一整套封装
2、在页面中引入 cryptovar crypto = require("crypto");
3、加密var md5 = crypto.createHash('md5')
let passwordMd5 = md5.update('password').digest('hex')
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'));