系列文章目录
一阶段
1.Node基本模块之 fs
2. Node基本模块之stream
3.Node基本模块之http
4.Node基本模块之crypto
二阶段 koa框架
1.koa入门以及koa如何处理不同url
2.koa的模板引擎Nunjucks
3.koa实现MVC模式
三阶段
1.Node+WebSocket 实现一个聊天室
四阶段
1.在koa中如何使用REST
2.在koa中编写符合REST 的接口
提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。
提示:以下是本篇文章正文内容,下面案例可供参考
一、crypto模块是什么?
- crypto模块的目的是为了提供通用的加密和哈希算法。用纯JavaScript代码实现这些功能不是不可能,但速度会非常慢。
- Nodejs用C/C++实现这些算法后,通过cypto这个模块暴露为JavaScript接口,这样用起来方便,运行速度也快。
- 简单说:crypto 是一个包括了加解密算法的库。
- node crypto 模块提供了加密功能,包括对 OpenSSL 的哈希、HMAC、加密、解密、签名、以及验证功能的一整套封装
二、crypto支持算法
1.MD5、sha1、sha512
MD5是一种常用的哈希算法,用于给任意数据一个“签名”。这个签名通常用一个十六进制的字符串表示
注意:
const crypto = require('crypto');
const hash = crypto.createHash('md5');
// 创建hash 有三种不同选择,md5 是应用比较广泛的一种
// 如果要计算SHA1,只需要把'md5'改成'sha1'
// 还可以使用更安全的sha256和sha512
// 可任意多次调用update(),传入待加密处理的字符串或者二进制
hash.update('Hello');
// 按照指定的格式进行加密输出
// hash.digest() 可以选择 'bin' 和 hex 分别对应 二进制和16进制
const newStr = hash.digest('hex')
console.log(newStr);
2.Hmac
- Hmac算法也是一种哈希算法,它可以利用MD5或SHA1等哈希算法。不同的是,Hmac还需要一个密钥
- 只要密钥发生了变化,那么同样的输入数据也会得到不同的签名,因此,可以把Hmac理解为用随机数“增强”的哈希算法
- 关于 secretKey 我们可以采用随机生成的模式这样的话,加密的等级会有更加长足的进步
const secretKey = 'qwerty'
const hmac = crypto.createHmac('sha256', secretKey);
hmac.update('Hello');
console.log(hmac.digest('hex'));
//c51283c48610dd9b433ce4bf9e7b0b44b808f98bb056fca45953101b1d8fc973
//改变secretKey
const secretKey = 'zxcvbn'
const hmac = crypto.createHmac('sha256', secretKey);
hmac.update('Hello');
console.log(hmac.digest('hex'));
//f179a8eb3d0dec61ccc9fafcfc64e901437947708e19b9efa57383638923cfa9
3.AES
AES是一种常用的对称加密算法,加解密都用同一个密钥。 crypto模块提供了AES支持,但是需要自己封装好函数// 加密
function aesEncrypt(data, key) {
const cipher = crypto.createCipher('aes192', key);
var crypted = cipher.update(data, 'utf8', 'hex');
crypted += cipher.final('hex');
return crypted;
}
// 解密
function aesDecrypt(encrypted, key) {
const decipher = crypto.createDecipher('aes192', key);
var decrypted = decipher.update(encrypted, 'hex', 'utf8');
decrypted += decipher.final('utf8');
return decrypted;
}
// 待加密字符串
var data = 'Hello, this is a secret message!';
// 密钥key
var key = 'Password!';
// 加密函数
var encrypted = aesEncrypt(data, key);
// 解密函数
var decrypted = aesDecrypt(encrypted, key);
console.log('Plain text: ' + data);
console.log('Encrypted text: ' + encrypted);
console.log('Decrypted text: ' + decrypted);
总结
这篇文章主要给大家介绍几种node常见的密码加密方式,希望对大家可以有所帮助。