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)

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

猜你喜欢

转载自blog.csdn.net/qq_37635012/article/details/127472458