Nodejs 中的加密

2020-11-27 11:45发布

在程序开发过程中,避免不掉要对一些数据进行加密,例如用户注册的密码、用户的个人信息等。加密这个事,在NodeJS中非常简单,因为NodeJS提供了crypto模块来帮助你快速的实现加密。

1. crypto模块简介

crypto 模块提供了加密功能,实现了包括对 OpenSSL 的哈希、HMAC、加密、解密、签名、以及验证功能的一整套封装

2. 使用

想使用crypto模块,那么自然需要先引入该模块了。

        
let crypto = require('crypto');
3. 示例

1)使用该模块来进行md5加密

        const crypto = require('crypto');
        const hash = crypto.createHash('md5');
        // 可任意多次调用update():
        hash.update('Hello, world!');
        hash.update('Hello, nodejs!');
        console.log(hash.digest('hex')); // 7e1977739c748beac0c0fd14fd26a544

备注:createHash()方法返回一个Hash 实例,然后通过调用update方法写入要加密的数据。然后通过调用digest()方法来指定以什么样进制格式来输出加密之后的数据。

 

2) 通过sha256方式来加密

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

该方案和上面的md5方案类似,只不过,HMAC运算利用哈希算法,以一个密钥和一个消息为输入,生成一个加密串作为输出。HMAC可以有效防止一些类似md5的彩虹表等攻击,比如一些常见的密码直接MD5存入数据库的,可能被反向破解。 crypto.createHmac(algorithm, key) 这个方法返回和createHash一样,返回一个HMAC的实例。然后通过调用updatedigest方法来完成数据的加密。

 

除了上面的两种较为简单的加密方式,crypto模块也可以处理数字证书。数字证书通常用在SSL连接,也就是Webhttps连接。一般情况下,https连接只需要处理服务器端的单向认证,如无特殊需求(例如自己作为Root给客户发认证证书),建议用反向代理服务器如NginxWeb服务器去处理证书