Node加密模块:crypto

2020-07-18 18:26:46 浏览数 (1)

互联网的时代,用户个人信息数据泄露的情况屡屡发生,我们不得不重视数据的安全。而Node中的crypto模块为我们提供了数据加密的功能,下面简单介绍下crypto的使用。

hash


通过hash算法将原始数据加密为二进制值,原始数据不同,加密的结果肯定不同,而且过程不可逆,也就是说不能解密,一般用于登录验证等场景。

hash算法有很多种,但是md5存在被攻破的风险,sha1近日也被Google的安全团队攻破,因此不建议使用。

以下为一个示例,使用sha256算法加密:

const crypto = require('crypto'); const hash = crypto.createHash('sha256'); //使用update方法输入需要加密的数据 hash.update('some data to hash'); //使用digest方法将加密的结果转码为十六进制 console.log(hash.digest('hex'));

hmac


与hash类似,加密数据且不可逆,但是除了要指定md5、sha1、sha256等算法外,还需要指定一个任意的字符串,由此生成加密的结果,这也就意味着比hash更安全。

示例:

const crypto = require('crypto'); //此处多了一个自定义的字符串‘a secret’,其余部分与hash相同 const hash = crypto.createHmac('sha256', 'a secret'); hash.update('some data to hash'); console.log(hash.digest('hex'));

cipher和decipher


hash和hmac都是不可逆的,没有解密方法,但是很多场景下不仅需要加密数据存储到数据库中,还需要将加密后的数据解密出来使用,cipher和decipher分别就是加密和解密。

加密示例:

const crypto = require('crypto'); //加密与hmac类似 const cipher = crypto.createCipher('aes192', 'a password'); // 加密内容为'some clear text data' //update方法输入加密内容、输入数据编码、输出数据编码 var encrypted = cipher.update('some clear text data', 'utf8', 'hex'); //final方法指定输出结果编码方式 encrypted = cipher.final('hex'); console.log(encrypted);

解密示例:

const crypto = require('crypto'); const decipher = crypto.createDecipher('aes192', 'a password'); var encrypted = 'ca981be48e90867604588e75d04feabb63cc007a8f8ad89b10616ed84d815504';//需要解密的数据 //update方法输入解密内容、输入数据编码、输出数据编码 var decrypted = decipher.update(encrypted, 'hex', 'utf8'); //final方法指定输出结果编码方式 decrypted = decipher.final('utf8'); console.log(decrypted);

以上的内容都是最为常见、使用最频繁的加密解密,一般来说已经可以满足不少node开发数据安全的需求了(如果是银行金融等等安全性要求更高),除此之外还有签名、验证、DiffieHellman算法等等方面的内容,暂且不做介绍。

0 人点赞