Node.js12---crypto模块

crypto模块

crypto模块的目的是为了提供通用的加密和哈希算法,用纯js代码实现这些功能是不可能的,但速度会非常慢,Nodejs用C/C++实现这些算法后,通过crypto这个模块暴露为js接口,这样用起来方便,运行速度也快。MD5是一种常用的哈希算法,用于给任意数据一个“签名”,这个签名通常用一个十六进制的字符串表示。

Hash算法
const crypto = require('crypto')
const hash = crypto.createHash('md5')
hash.update('Hello world!');
console.log(hash.digest('hex'));

运行之后结果如下:

86fb269d190d2c85f6e0468ceca42a20

update( )方法默认字符串编码为utf-8,也可以传入Buffer。如果要计算SHA1,只需要把’md5’改为’sha1’,就可以得到SHA1的结果。如下代码:

const crypto = require('crypto')
const hash = crypto.createHash('sha1')
hash.update('Hello world!');
console.log(hash.digest('hex'));

运行之后结果如下:

d3486ae9136e7856bc42212385ea797094475802
Hmac算法

Hmac算法也是一种哈希算法,它可以利用MD5或SHA1等哈希算法。不同的是,Hmac还需要一个密钥:

const crypto = require('crypto')
const hmac = crypto.createHmac('sha256', 'secret-key');
hmac.update('Hello world!');
console.log(hmac.digest('hex'));

运行之后结果如下:

157114c4ecc122e2d8355e43ab5b9075faf6a772a4b253263f1b0aaad1b5fcbf

只要密钥发生了变化,那么同样的输入数据也会得到不同的签名,因此,可以把Hmac理解为用随机数"增强"的哈希算法。

AES对称加密算法

AES是一种常用的对称加密算法,加密和解密都是同一个密钥,crypto模块提供了AES支持,但是需要自己封装好函数,便于使用:

//AES对称加密算法
const crypto = require('crypto')

//加密
function encrypt(key, iv, data) {
    var dep = crypto.createCipheriv('aes-128-cbc', key, iv)
    return dep.update(data, 'binary', 'hex') + dep.final('hex');
}

//解密
function decrypt(key, iv, crypted) {
    crypted = Buffer.from(crypted, 'hex').toString('binary')
    var decipher = crypto.createDecipheriv('aes-128-cbc', key, iv);
    return decipher.update(crypted, 'binary', 'utf8') + decipher.final('utf8')
}

//16*8 = 128
var key = "abcdef1234567890"
var iv = "tsdert1234567890"
var data = "xiaoming"
var testEncrypt = encrypt(key, iv, data)
console.log("加密结果:", testEncrypt)
var testDecrypt = decrypt(key, iv, testEncrypt)
console.log("解密结果:", testDecrypt)

执行代码后结果如下:
请添加图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值