Node.js系列学习之crypto模块

系列文章目录

一阶段
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模块是什么?

  1. crypto模块的目的是为了提供通用的加密和哈希算法。用纯JavaScript代码实现这些功能不是不可能,但速度会非常慢。
  2. Nodejs用C/C++实现这些算法后,通过cypto这个模块暴露为JavaScript接口,这样用起来方便,运行速度也快。
  3. 简单说:crypto 是一个包括了加解密算法的库。
  4. 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常见的密码加密方式,希望对大家可以有所帮助。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值