Node.js之crypto(加密)模块(一)

加密是通过某种方式改变原有的信息数据,提高了网络数据传输的安全行。加密方式很有多种,可以将其分为可逆和不可逆。crypto 模块提供了加密功能,包括对 OpenSSL 的哈希、HMAC、加密、解密、签名、以及验证功能的一整套封装。

判断是否能使用crypto模块

let crypto;
try {
  crypto = require('crypto');
} catch (err) {
  console.log('不支持 crypto');
}

哈希算法

哈希算法是将任意长度的二进制值串映射为固定长度的二进制值串,常见的有MD5,sha1等。使用哈希算法加密的数据是不可逆的,而且哈希算法对需要加密的数据比较敏感,哪怕只有一个字节不同,所得到的哈希值相差也很大。

crypto模块中与哈希算法有关的方法
  1. crypto.getHashes():获取所有哈希算法的加密方式
  2. crypto.createHash(algorithm) :使用algorithm的加密方法创建一个哈算算法
const crypto = require('crypto');
console.log(crypto.getHashes());

Node.js之crypto(加密)模块(一)_第1张图片
如图所示就是哈希算法支持的加密算法。

哈希类中所包含的方法
  1. hash.update(data[, inputEncoding]):使用给定的 data 更新哈希的内容。 inputEncoding 表示编码方式,如果未提供 inputEncoding,并且 data 是字符串,则强制执行 ‘utf8’ 的编码
  2. hash.copy():创建一个Hash包含当前Hash对象内部状态的深层副本的新对象
  3. hash.digest([encoding]):获取加密结果,encoding 是用于指定加密后的返回值的格式,默认返回加密后的 Buffer 。
let md5 = crypto.createHash('md5');
let md5Sum = md5.update("我想通过md5加密");
console.log(md5.digest('hex'));

这个就是使用md5对数据进行加密,在对同一数据进行md5加密时,加密的结果完全一致。可以对一个数据进行多次加密,防止破解时通过"撞库"进行暴力破解

let md5 = crypto.createHash('md5');
md5.update("我想通过md5加密");
let result = md5.digest('hex');
console.log(result);

let md5_ = crypto.createHash('md5');
md5_.update(result);
let result_ = md5_.digest('hex');
console.log(result_);

在使用过程中,也可以使用 update() 方法对数据进行分段加密

let md5 = crypto.createHash('md5');
md5.update("我想").update("通过").update("md5").update("加密");
let result = md5.digest('hex');
console.log(result);

以上只是讲解了哈希算法中的一个加密方式,如果想要使用其他加密方式,也可以在 createHash() 方法中修改参数。

Hmac算法

Hmac算法又叫加盐算法。HMAC运算利用哈希算法,以一个密钥和一个消息为输入,生成一个消息摘要作为输出

创建一个Hmac算法
let cry = crypto.createHmac("sha1", 'aaa')
cry.update("我和你");
console.log(cry.digest('Base64'));

createHmac()方法的第一个参数是加密的算法,和哈希算法的加密算法相同,第二参数就是密钥。

Hmac类中所包含的方法
  1. hash.update(data[, inputEncoding]):使用给定的 data 更新Hmac的内容。 inputEncoding 表示编码方式,如果未提供 inputEncoding,并且 data 是字符串,则强制执行 ‘utf8’ 的编码
  2. ash.digest([encoding]):获取加密结果,encoding 是用于指定加密后的返回值的格式,默认返回加密后的 Buffer 。

你可能感兴趣的:(node.js)