在程序开发过程中,避免不掉要对一些数据进行加密,例如用户注册的密码、用户的个人信息等。加密这个事,在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的实例。然后通过调用update和digest方法来完成数据的加密。
除了上面的两种较为简单的加密方式,crypto模块也可以处理数字证书。数字证书通常用在SSL连接,也就是Web的https连接。一般情况下,https连接只需要处理服务器端的单向认证,如无特殊需求(例如自己作为Root给客户发认证证书),建议用反向代理服务器如Nginx等Web服务器去处理证书